在实体的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。还有其他方法吗?

在实体的LinQ中的Where条件中使用Last方法

尝试将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();