2012-05-04 7 views
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)

ユーザーのための

検索。場所:ソーホー。郡1ロケーションID = 2.郡2ロケーションID = 3.

これは一致します。

エラー私が受け取る(ソーホーので2のLocationIdで郡を持っている、とそうNYCを行います):

型「xxx.xxx.Locations.MiniLocation」が一定の値を作成することができません。 。このコンテキストでは、プリミティブ型( 'Int32、String、およびGuid'など)のみがサポートされています。

+0

は()あなたが.Joinにしようとしましたか? –

答えて

1

このMSDN pageには、この構文がサポートされていないと記載されています。 Anyの代わりに、.Net 3.5 Linq for Entitiesにはthis methodを使用できます。

+0

Im on .NET 4.これでエラーは理解できますが、あなたが提供したリンクで提案されている解決策ではありません。その他のアドバイス/例? – RPM1984

0

検索できるロケーションIDのリストを作成する必要があります。

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

その後、あなたは次のようにContainsを使用することができます。

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

私はそれが正しいとは思わない。まず、 '.Contains'は' T'または 'IEnumerable 'のみをとります。第2に、それは、郡のいずれかが検索された場所の所在地IDを含む場所と一致するだけであり、一方、郡のいずれかには、検索された場所の郡のいずれかが含まれている場所が欲しい。複雑で、私は知っている。 :) – RPM1984

+0

更新........ –