gpt4 book ai didi

linq - 查找一个列表中的所有对象,这些对象的属性与另一个对象列表中的属性相匹配

转载 作者:行者123 更新时间:2023-12-02 09:04:09 27 4
gpt4 key购买 nike

问题

我正在尝试使用另一个表(基于 ModelB)查询一个表(基于 ModelA)。对于此示例,这些模型进行了简化。我需要将结果保留为 IQueryable,因此更改为 EnumerableList 不是选项。不过,我尝试添加 .ToList() 但得到了同样的错误。

MyId 从一个列表中拉到一个字符串列表中(以便使用 Contains())不是一种选择,因为可能有太多MyIds (> 40k) 会导致错误指示操作耗尽资源,我猜这是指 RAM。

错误

InvalidOperationException: The LINQ expression ... could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync().

模型A

public class ModelA
{
public string MyId { get; set; }
public string MyName { get; set; }
}

模型B

public class ModelB
{
public string MyId { get; set; }
public string MyName { get; set; }
}

尝试

var results = context.ModelA
.Where(a => ModelB.All(b => b.MyId == a.MyId));

什么方法可以成功?

最佳答案

您可以尝试检查第二个列表是否包含匹配 ID 的“Any()”

var results = context.ModelA
.Where(a => ModelB.Where(b => b.MyId == a.MyId).Any());

或者你可能想尝试加入

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join-clause

var results = context.ModelA
.Where(a => ModelB.
Any(b => b!= null && b.id != null
&& a!=null && a.id!==null &&
b.MyId == a.MyId));

我用的是 Select 而不是 Where,我检查了空值

关于linq - 查找一个列表中的所有对象,这些对象的属性与另一个对象列表中的属性相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398366/

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