Last和LastOrDefault不受支持

Mar*_*hal 40 .net c# linq linq-to-sql

我试图获取列表中的第一个值和最后一个值.查询经营者First()的支持,但Last()LastOrDefault()给出错误.我是否Last()以错误的方式使用操作员?

   var purchaseBills = db.PurchaseBills.OrderBy(p => p.BillID);

   if (purchaseBills.Count() >0)
   {
       var firstBill= purchaseBills.First(); //This is supported

       //Attempt 1                    
       var lastBill = purchaseBills.Last(); // Not supported

       //Attempt 2
       var lastBill = purchaseBills.LastOrDefault(); //Not supported

       //Attempt 3
       var lastBill = purchaseBills.Reverse().First(); //Not supported

       textBoxPurchaseBillFrom.Text = firstBill.BillNo.ToString();
       textBoxPurchaseBillTo.Text = lastBill.BillNo.ToString();
   }
Run Code Online (Sandbox Code Playgroud)

更新: - 错误 -

尝试1:不支持查询运算符"Last".

尝试2:不支持查询运算符"LastOrDefault".

尝试3:不支持查询运算符"反向".

Oli*_*ver 48

  • 而不是通过调用将其放入自己的列表,ToList()或者ToArray()我更愿意使用AsEnumerable().
  • 另外你应该尝试其他人 OrderByDescending()
  • 而不是Count()我会使用Any().

  • 我发现通过降序排序,然后使用FirstOrDefault()将起作用. (2认同)

Car*_*ten 22

要么将OrderBy切换为

.OrderByDescending(p => p.BillID)
Run Code Online (Sandbox Code Playgroud)

(并先使用)或你做的事情

purchaseBills.ToArray().Last()
Run Code Online (Sandbox Code Playgroud)

如果这不贵.


小智 18

Last后端数据库不支持.你应该尝试其他技术:

  1. 使用您的查询,OrderByDescending以便您首先获得所请求的项目.

  2. 像往常一样对LINQ查询进行编码,但强制使用Linq2Sql将其呈现给CLR集合,然后您可以在本地免费访问所有内容,包括Last.例:

    var bills = purchaseBills.ToList();
    var last = bills.Last();
    
    Run Code Online (Sandbox Code Playgroud)


Geo*_*ett 10

问题是没有简单的SQL 转换为Last或者Reverse,所以要么将其转换为内存中的某些内容(ToList,ToArray),如果没有太多的记录,或者你可以第二次运行查询,OrderByDescending而不是OrderBy和用First.


小智 7

我尽量不使用,LastOrDefault()因为有时它不起作用或支持.我整理iddesc,然后抢到第一的记录.

.OrderByDescending(o=>o.id)
.FirstOrDefault(s => s.Name == Name)
Run Code Online (Sandbox Code Playgroud)