实体框架 出错.任意() 过滤器

本文关键字:过滤器 任意 框架 出错 实体 | 更新日期: 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));