在实体的LinQ中的Where条件中使用Last方法
本文关键字:Last 方法 条件 Where 实体 LinQ 中的 | 更新日期: 2023-09-27 18:27:49
查看此代码
IQueryable<Request> RequestsTotal = DataContext.Requests;
RequestsTotal = RequestsTotal.Where(rec =>
rec.RequestTransactions.Last().ServerStatusId != 0);
在执行此代码的过程中,我遇到了一个关于在Where条件中使用Last方法的错误。我该怎么解决这个问题?!
更新1:这是发生的错误:
LINQ to Entities不识别方法"DAL.RequestTransaction LastRequestTransaction"方法,并且此方法无法转换为存储表达式
UPDATE2:我有一个Request
表,该表与RequestTransactions
表有一对多关系。通过这个代码,我试图获取在最后一次记录其输入代码RequestTransactions
时没有ServerStatusId = 0
的所有requests
。还有其他方法吗?
尝试将Last()方法放在where之外:
Request newResult =
RequestsTotal
.Where(rec => rec.RequestTransactions.ServerStatusId != 0)
.Last();
Last还将执行查询并返回单个Request对象,而不是IQueryable。因此,您不能对结果重复使用"RequestsTotal"。
我把代码改成这样:
IQueryable<Request> RequestsTotal = DataContext.Requests;
List<Request> temp = new List<Request>();
foreach (Request request in RequestsTotal)
{
RequestTransaction last = request.RequestTransactions.LastOrDefault();
if (last != null && last.ServerStatusId != 0)
temp.Add(request);
}
RequestsTotal = temp.AsQueryable();