以下是我的问题:
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>
。我正在尝试做什么:
返回所有用户,其中这些位置的任何县都有属于搜索位置的任何县的locationId。
示例:
搜索纽约市(LocationId = 1. County1LocationId = 2)
用户:鲍勃。地点:Soho。 County1LocationId = 2.Counts2 LocationId = 3.
这是一场比赛。 (因为Soho有一个LocationId为2的县,NYC也是如此)
我收到错误:
无法创建类型为“xxx.xxx.Locations.MiniLocation”的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。
有什么想法吗?
答案 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));