Context db = new Context();
List<Invoice> invoice =
(from LocalInvoice in db.Invoices
where LocalInvoice.Site_Id == this.SiteIdentifier
select LocalInvoice).ToList();
返回记录列表。我想选择列表中的最后一个。
我试过.ToList().LastOrDefault();
但是我得到的错误是无法将类型'invoice'转换为'System.Collections.Generic.List。
为什么说我没有将发票声明为列表List<Invoice> invoice
任何帮助非常感谢。 TA
修改 感谢您的回复,大家都尝试过您所有人建议的内容以及每次收到错误:不支持查询运算符“LastOrDefault”。
我还没有解释我整体上要做的事情,这可能会导致问题。 我有一张包含所有发票的表格,每张发票都有一个单独的'id'。但是,每条记录都有一个SiteIdentifier列,该列可以多次用于不同的发票。 因此,每个站点可能有多个发票。
尝试获取该网站的最新发票。 所以说发票
id SiteIdentifier
73 25
74 25
75 25
我试图获取SiteIdentifier == this.SiteIdentifier(例如25)的所有记录,然后获取最新记录,该记录的发票号为75.
有人有什么想法吗? 再次感谢所有帮助
答案 0 :(得分:23)
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);
答案 1 :(得分:5)
LastOrDefault将返回Invoice的实例,而不是集合,因此请更改变量类型。
Invoice invoice =
(from LocalInvoice in db.Invoices
where LocalInvoice.Site_Id == this.SiteIdentifier
select LocalInvoice).LastOrDefault();
或更清洁:
var invoice = db.Invoices.LastOrDefault(i => i.Site_Id == this.SiteIdentifier);
答案 2 :(得分:0)
LastOrDefault
将返回单个元素,而不是List
。这可行:
Invoice invoice =
(from LocalInvoice in db.Invoices
where LocalInvoice.Site_Id == this.SiteIdentifier
select LocalInvoice)
.LastOrDefault();