5

这是我的查询:

var x = db
   .Users
   .Where(u => u.Locations.Any(l => searchedLocation.Counties.Any(c => c.LocationId == l.LocationId));

语境:

  • UsersIQueryable<User>。(EF 对象集)
  • searchedLocation是一个Location对象。
  • Counties是一个ICollection<MiniLocation>

我正在尝试做的事情:

返回所有用户,其中这些位置的任何县都具有属于搜索位置的任何县的 locationId。

例子:

搜索纽约市 (LocationId = 1. County1LocationId = 2)

用户:鲍勃。地点:苏活区。County1LocationId = 2。County2 LocationId = 3。

所以这是一场比赛。(因为 Soho 有一个 LocationId 为 2 的县,NYC 也是如此)

我收到的错误:

无法创建类型为“xxx.xxx.Locations.MiniLocation”的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。

有任何想法吗?

4

2 回答 2

1

MSDN 页面声明不支持此构造。您可以将此方法用于 .Net 3.5 Linq to Entities 以帮助替换使用Any.

于 2012-05-04T03:16:23.730 回答
0

您需要构建一个可以搜索的位置 ID 列表。

var idsToSearch = "1,2,3,4,5...";    

然后你可以通过Contains以下方式使用:

var x = db
       .Users
       .Where(u => idsToSearch.Contains(u.LocationId));
于 2012-05-04T03:27:57.093 回答