gpt4 book ai didi

c# - LINQ lambda : Getting Last item (where == ) of sub collection

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:21 24 4
gpt4 key购买 nike

我有以下内容(我在 CodeFirst 中使用过):

public class MyForm
{
public int MyFormId { get; set; }
//Many Form Properties
public virtual ICollection<AuditItem> AuditItems { get; set; }
}

public class AuditItem
{
public int AuditItemId { get; set; }
public int MyFormId { get; set; }
public IAppUser User { get; set; }
public string ActionByUserStr { get; set; }
public string ActionByUserDisplayName { get; set; }
public DateTime DateOfAction { get; set; }
public string TypeOfAction { get; set; }
public int Step { get; set; }

public virtual MyForm MyForm { get; set; }
}

AuditItem 跟踪在 MyForm 上执行的许多操作

我正在展示一个索引页面,该页面显示一个表格,其中 AuditItem 的最后一步 = 1。

我按 DateOfAction 进行排序(因为 Step 可以退回到 0,所以我不希望它等于 1,除非它也是该 MyForm 的最后一个 AuditItem 记录),然后选择最后一个记录的步骤,然后查询在那上面。我想尽早查询,这样我就不会撤回不需要的 MyForms 记录。

这是我的查询:

var myFormsAtStep1 =
context.MyForms.Include("AuditItems").Where(
mf => mf.AuditItems.OrderBy(ai => ai.DateOfAction).Last().Step == 1);

它给出了这个错误:

LINQ to Entities does not recognize the method 'MyForms.Models.AuditItem Last[AuditItem](System.Collections.Generic.IEnumerable`1[MyForms.Models.AuditItem])' method, and this method cannot be translated into a store expression.

最佳答案

查看 Supported and Unsupported LINQ Methods 的列表.

Last() 不受支持,但 First() 受支持,因此您可以继续并反转顺序并使用 First() 而不是 Last()

mf => mf.AuditItems.OrderByDescending(ai => ai.DateOfAction).First().Step == 1);

关于c# - LINQ lambda : Getting Last item (where == ) of sub collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com