在Linq的Row_number(由yyy分区)?

时间:2014-12-12 13:51:54

标签: c# asp.net-mvc linq

我对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.IEnumerable 1[System.Decimal], System.Int32,System.Int32]] Zip[tblPrice,Int32,<>f__AnonymousType5 1 [System.Int32]   System.Func 1[MyProjectMVC.Models.tblPrice], System.Collections.Generic.IEnumerable 3 [System.Nullable`1 [System.Decimal],System.Int32,System.Int32]])&#39;   方法,并且此方法无法转换为商店表达式。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

@Adil Mammadov对,因为LINQ无法将方法转换为SQL。

为了避免这个问题,你有几个解决方案:

  1. 指定MS SQL计算列,只需使用LINQ
  2. 获取它
  3. 将您的ows翻译写入SQL
  4. @Matt Burland如何说 - 得到结果然后处理它
  5. 我想在你的情况下问题可以这样解决:

    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