Asp.net 获取LINQ列表中的最后一个

Asp.net 获取LINQ列表中的最后一个,asp.net,linq,Asp.net,Linq,我试图获取SiteIdentifier==this.SiteIdentifier(例如25)的所有记录,然后获取发票id为75的最新记录 有人有什么想法吗? 再次感谢所有帮助LastOrDefault将返回发票实例,而不是集合,因此请更改变量类型 id SiteIdentifier 73 25 74 25 75 25 或更清洁的蒸馏器: Invoice invoice = (from LocalInvoice in db.Invoices where LocalInvoice.

我试图获取SiteIdentifier==this.SiteIdentifier(例如25)的所有记录,然后获取发票id为75的最新记录

有人有什么想法吗?
再次感谢所有帮助

LastOrDefault将返回发票实例,而不是集合,因此请更改变量类型

id SiteIdentifier 
73 25
74 25
75 25
或更清洁的蒸馏器:

Invoice invoice =
   (from LocalInvoice in db.Invoices
    where LocalInvoice.Site_Id == this.SiteIdentifier
    select LocalInvoice).LastOrDefault();

LastOrDefault将返回单个元素。您不应该在不应用过滤器的情况下调用ToList,它将从数据库中检索所有行,而您只需要一行

var invoice = db.Invoices.LastOrDefault(i => i.Site_Id == this.SiteIdentifier);
如果要查询关系表,还必须应用排序。LastOrDefault仅对内存中的集合有意义。看起来EF中不支持它,将引发异常

最佳解决方案是颠倒顺序并使用FirstOrDefault方法:

var invoice = db.Invoices.LastOrDefault(s => s.Site_Id == this.SiteIdentifier);
将返回单个元素,而不是
列表
。这将有助于:

var invoice = db.Invoices.OrderByDescending(s => s.Id) 
                         .FirstOrDefault(s => s.Site_Id == this.SiteIdentifier);

真没效率!将查询数据库中的所有记录,并在应用程序上取最后一个,而不是数据库端。第二个示例适用于第一个或默认值。恐怕我特别需要数据库中最新的记录。last正在引发错误查询运算符“last”不受支持,lastordefault与我的原始帖子中的原始错误相同。“你有什么想法吗?”约翰,这就是你为什么要订购的原因。我假设Id最大的记录是最近的记录。远程序列不像内存中的序列,除非你告诉它怎么做,否则它无法决定哪一个是最后一个。这就是为什么不支持LastOrDefault,您必须使用FirstOrDefault。
var invoice = db.Invoices.OrderByDescending(s => s.Id) 
                         .FirstOrDefault(s => s.Site_Id == this.SiteIdentifier);
Invoice invoice =
    (from LocalInvoice in db.Invoices
     where LocalInvoice.Site_Id == this.SiteIdentifier
     select LocalInvoice)
    .LastOrDefault();