c# - 使用 Contains 的 EF LINQ 查询未返回所有匹配的记录

标签 c# .net postgresql entity-framework asp.net-core

我有一个 .NET Core 3.1 应用程序,其中 Entity Framework 与 PostgreSQL 数据库通信。 我使用 Npgsql 库 3.1.0、代码优先模式和 LINQ 来进行查询。

所以,我有一个表 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# - 使用 Contains 的 EF LINQ 查询未返回所有匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441740/

相关文章:

c# - 取消路线内的任务

.net - Windows窗体错误解析VB.NET

.net - Windows Server 2003 下的.NET 2.0 GAC 在哪里?

.net - 为作为单独进程运行的 MAF 插件指定一个自定义名称

postgresql - 连接两列并用 postgresql 中的结果替换其中一列

python-3.x - 类型错误 : Object of type 'DataFrame' is not JSON serializable

c# - VSTO 中的加载项 - 如何使用带按钮的功能区从 Word 文档中获取文本

c# - .NET 唯一对象标识符

database - 可以在 CTE 中订购 JOIN 操作吗? (PostgreSQL)

c# - 获取静态 DateTime 值的最佳方法