我有一个简单的整数列表,表示一周中的几天。我正在尝试检查我的实体的Date属性是否在选定的一周中。但是,如果我试图在查询中传递它,目标是这样的数据库:
query.Where(e => selectedDaysOfWeek.Contains((int)e.Date.DayOfWeek));我有个例外:
的LINQ表达式..。无法翻译。要么用可以翻译的表单重写查询,要么通过插入对AsEnumerable()、AsAsyncEnumerable()、ToList()或ToListAsync()的调用,显式地切换到客户端计算。
另一方面,如果我首先通过调用ToList() (例如)来执行查询,然后在结果列表上添加相同的where条件,它会工作:
var items = query.ToList();
items = items.Where(e => selectedDaysOfWeek.Contains((int)e.Date.DayOfWeek)).ToList();虽然在我的例子中,这是可以接受的,但我希望从数据库中获取更少的项目。在查询db时是否有一种检查DayOfWeek的方法,这是我最初的意图?
发布于 2020-05-06 15:36:58
您正在从查询中的DayOfWeek引用访问DateTime属性。
实体框架“不知道”如何将其转换为SQL,从而在第一段代码中得到异常。
在第二部分中,在.ToList()调用从数据库中获取所有数据之后,.Where筛选正在内存中进行。
如果希望在数据库端实现该逻辑,则必须编写自己的SQL语句。
https://stackoverflow.com/questions/61638030
复制相似问题