Entity Framework .Any()过滤器出错

时间:2012-05-04 02:01:26

标签: c# linq entity-framework

以下是我的问题:

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

上下文

  • UsersIQueryable<User>。 (EF对象集)
  • searchedLocationLocation个对象。
  • CountiesICollection<MiniLocation>

我正在尝试做什么:

  

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

示例:

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

用户:鲍勃。地点:Soho。 County1LocationId = 2.Counts2 LocationId = 3.

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

我收到错误:

  

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

MSDN page表示不支持此构造。您可以使用this method for .Net 3.5 Linq to Entities来帮助替换Any的使用。

答案 1 :(得分:0)

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

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

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

var x = db
       .Users
       .Where(u => idsToSearch.Contains(u.LocationId));