我有一个 .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/