我对LINQ非常陌生,我最初使用它的一个尝试必须超级复杂!
我正在努力调整此Stack Over question中接受的答案。
我这样写了:
using (var ctx = new MyEntities())
{
var q = ctx.tblPrices.OrderByDescending(x => x.Cost)
.GroupBy(x => x.ItemID)
.Select(g => new {g, count = g.Count()})
.SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) => new {j.WebPrice, j.PriceID, j.ItemID}));
foreach (var i in q)
{
sb.AppendFormat("Id = {0}, Name = {1}, ItemId = {2}<hr/>", i.WebPrice, i.PriceID, i.ItemID);
}
}
基本上,我想从不同的供应商处返回相同商品的最便宜的价格。
但是,当我运行项目时,我收到以下非常长的错误消息,我不知道这意味着什么。但它看起来很严重!
LINQ to Entities无法识别该方法 &#39; {System.Collections.Generic.IEnumerable {1}} 3 [System.Nullable
1[<>f__AnonymousType5
3](System.Collections.Generic.IEnumerable1[System.Decimal], System.Int32,System.Int32]] Zip[tblPrice,Int32,<>f__AnonymousType5
1 [System.Int32] System.Func1[MyProjectMVC.Models.tblPrice], System.Collections.Generic.IEnumerable
3 [System.Nullable`1 [System.Decimal],System.Int32,System.Int32]])&#39; 方法,并且此方法无法转换为商店表达式。
非常感谢任何帮助。
答案 0 :(得分:5)
@Adil Mammadov对,因为LINQ无法将方法转换为SQL。
为了避免这个问题,你有几个解决方案:
我想在你的情况下问题可以这样解决:
var q = ctx.tblPrices.OrderByDescending(x => x.Cost)
.ToList()
.GroupBy(x => x.ItemID)
.Select(g => new {g, count = g.Count()})
.SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) => new {j.WebPrice, j.PriceID, j.ItemID}));
或者甚至喜欢这样:
var q = ctx.tblPrices.OrderByDescending(x => x.Cost)
.GroupBy(x => x.ItemID)
.Select(g => new {g, count = g.Count()})
.ToList()
.SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) => new {j.WebPrice, j.PriceID, j.ItemID}));
您还可以查看this my answer。