【发布时间】:2021-12-28 22:59:30
【问题描述】:
假设我有一个包含员工任务列表的活动:
public class Event()
{
public Guid? StaffId { get; set; }
}
public class StaffTask()
{
public Guid StaffId { get; set; }
public Guid TaskId { get; set; }
}
在获取工作人员列表的所有事件的情况下,我该如何做这样的事情?
var staffTasks = new List<StaffTasks>()
{
new StaffTask () { StaffId = "guid1", TaskId = "guid2" },
new StaffTask () { StaffId = "guid3", TaskId = "guid4" }
};
queryable = _db.Events.AsQueryable()
.Where(event =>
staffTasks.Any(st => st.StaffId == event.StaffId)
);
我目前在运行上述程序时遇到此错误:
The LINQ expression 'DbSet<Event>()
.Where(e => __staffTasks
.Any(or => (Nullable<Guid>)or.StaffId == e.StaffId))' 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 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
我们的目标是让这里只返回第二个和第三个事件
var events = new List<Event>() {
new Event() { StaffId = null },
new Event() { StaffId = "guid1" },
new Event() { StaffId = "guid2" },
new Event() { StaffId = "guid20" },
new Event() { StaffId = null }
}
【问题讨论】:
-
问题几乎肯定是
(Nullable<Guid>)演员。这是 Entity Framework Core,对吗? -
正确。我错误地擦洗了我的对象并刚刚更新了它们,尽管我认为你的观点是正确的,我的事件中的
Staffid需要可以为空,因为在人为的情况下,事件不一定需要工作人员 -
我还添加了一个示例事件列表,作为搜索用例可能是合理的
-
FWIW,我只是尝试使道具不可为空,但同样的事情正在发生
-
Any不适用于本地集合(有小例外)。使用Contains或像这样的解决方案FilterByItems