Context db = new Context(); List<Invoice> invoice = (from LocalInvoice in db.Invoices where LocalInvoice.Site_Id == this.SiteIdentifier select LocalInvoice).ToList();
返回记录列表.我想选择列表中的最后一个.
我试过了.ToList().LastOrDefault();
但是错误im get不能将类型“invoice”转换为“System.Collections.Generic.List”.
为什么说这个没有将发票作为列表列出列表<发票>发票
任何帮助非常感谢.
钽
编辑
感谢您的回复,我已经尝试了所有建议,并且每次收到错误:查询运算符“LastOrDefault”不受支持.
另外,我实际上没有解释我正在努力做什么,这可能是一个问题.
我有一张包含所有发票的表,每个发票都有一个单独的’id’.然而,每个记录将有一个SiteIdentifier列,该列用于不同的发票多次.
因此,每个网站可能有多个发票.
试图获得最新的Invoice网站.
所以说发票
id SiteIdentifier 73 25 74 25 75 25
我试图获取SiteIdentifier == this.SiteIdentifier(例如25)的所有记录,然后获取最新的记录,该记录将具有发票id 75.
任何人都有什么想法?
再次感谢所有的帮助
解决方法
LastOrDefault将返回单个元素.您不应该首先调用ToList而不应用过滤器,当您只需要一个时,它将从数据库中检索所有行.
var invoice = db.Invoices.LastOrDefault(s => s.Site_Id == this.SiteIdentifier);
另外,如果要查询关系表,则必须应用订购. LastOrDefault只对内存中的集合有意义.看起来它在EF中不受支持,并会抛出异常.
最佳解决方案是反序排序和使用FirstOrDefault方法:
var invoice = db.Invoices.OrderByDescending(s => s.Id) .FirstOrDefault(s => s.Site_Id == this.SiteIdentifier);