gpt4 book ai didi

c# - 包含包含的 EF LINQ 查询返回并非所有匹配的记录

转载 作者:行者123 更新时间:2023-12-04 10:51:55 26 4
gpt4 key购买 nike

我有一个 .NET Core 3.1带有 Entity Framework 的应用程序与 PostgreSQL 数据库对话。
我用 Npgsql库 3.1.0、代码优先模式和 LINQ 进行查询。

所以,我有一张 table Meetings像这样的对象:

public class Meeting
{
[Key]
public string Id { get; set; }
public string CreatorId { get; set; }
public List<string> Members { get; set; }
}

我的查询是:

var userId = "...";
using var db = new DatabaseContext();
var meetings = db.Meetings.Where(m => m.CreatorId == userId || m.Members.Contains(userId));

它返回所有符合第一个条件的记录: m.CreatorId == userId ,但第二个没有记录: m.Members.Contains(userId) .

这也不起作用:

var meetings = db.Meetings.Where(m => m.Members.Contains(userId));

返回零记录。但是肯定有匹配的记录,因为:

var meetings = db.Meetings.ToList().Where(m => m.Members.Contains(userId));

按预期返回多条记录。

为什么会发生?我如何使用 Contains在这样的查询中?

最佳答案

好吧,我想我自己已经弄清楚了。

根据documentation ...Contains()查询应转换为 WHERE 3 = ANY(c."SomeArray") SQL 运算符,但下面有一个注释:

请注意,此时对 List<> 的操作翻译是有限的,但将来会改进。建议暂时使用数组。

我将模型更改为:

public class Meeting
{
[Key]
public string Id { get; set; }
public string CreatorId { get; set; }
public string[] Members { get; set; }
}

现在它起作用了。

关于c# - 包含包含的 EF LINQ 查询返回并非所有匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441740/

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