gpt4 book ai didi

c# - 如何在 EF Core 中使用 LINQ 将原始数据类型列表与实体连接起来?

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

在 .NET Standard 2.0 C# 类库项目中,我使用 EF Core .使用 LINQ,我想加入一个整数列表和一个用户列表以获得如下结果:

 //List of Ids(can contain 10,000+ entries)
var lstNums = new List<int>(){1,2,3,4 };

var lstOutput = (from u in _context.Users
join id in lstNums on u.Id equals id
select u).ToList();

此查询在 EntityFramwork 6.2 中以数据库优先的方式运行良好。最近我迁移到 EF Core Code-First,此查询停止工作。我在 lstNums 中测试了 3 条记录,但仍然无法正常工作。

Contains() 方法在这种情况下工作正常,但问题是我不知道条目 lstNums 将如何包含。我没有使用 Contains(),因为在某些情况下它会超过 IN 子句的最大长度。

非常感谢对此问题的任何解决方案。

最佳答案

并非所有 EF 版本都支持内存中集合的连接。 EF6 支持 for 原始类型集合,就像在您的示例中一样,而 EF Core 不支持。这可能会在未来的某个版本中发生变化(他们正在广泛研究查询翻译,目前甚至为 v3.0 重写它)。

不过,对于此类内存中集合,更安全的方法是使用 Contains 而不是 join,因为已知它适用于所有 EF 版本,例如而不是

join id in lstNums on u.Id equals id

使用

where lstNums.Contains(u.Id)

关于c# - 如何在 EF Core 中使用 LINQ 将原始数据类型列表与实体连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323915/

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