实体框架 出错.任意() 过滤器
本文关键字:过滤器 任意 框架 出错 实体 | 更新日期: 2023-09-27 18:33:12
这是我的查询:
var x = db
.Users
.Where(u => u.Locations.Any(l => searchedLocation.Counties.Any(c => c.LocationId == l.LocationId));
上下文:
-
Users
IQueryable<User>
.(EF 对象集) -
searchedLocation
是一个Location
对象。 -
Counties
是一个ICollection<MiniLocation>
。
我想做什么:
返回所有用户,其中这些位置的任何县具有属于搜索位置的任何县的位置 ID。
例:
搜索纽约市(位置 ID = 1。县 1位置 ID = 2)
用户:鲍勃。地点:苏活区。县 1位置 ID = 2。县 2 位置 ID = 3。
所以这是一场比赛。(因为 Soho 有一个 LocationId 为 2 的县,纽约市也是如此)
我收到的错误:
无法创建类型为"xxx.xxx.Locations.MiniLocation"的常量值。在此上下文中仅支持基元类型("Int32、字符串和 Guid")。
有什么想法吗?
此 MSDN 页指出不支持此构造。可以将此方法用于 .Net 3.5 Linq to Entities,以帮助替换Any
的使用。
您需要构建一个可以搜索的位置ID列表。
var idsToSearch = "1,2,3,4,5...";
然后,您可以通过以下方式使用 Contains
:
var x = db
.Users
.Where(u => idsToSearch.Contains(u.LocationId));