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().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后端数据库不支持.你应该尝试其他技术:
使用您的查询,OrderByDescending以便您首先获得所请求的项目.
像往常一样对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()因为有时它不起作用或支持.我整理id的desc,然后抢到第一的记录.
.OrderByDescending(o=>o.id)
.FirstOrDefault(s => s.Name == Name)
Run Code Online (Sandbox Code Playgroud)