2012-05-04 12 views
5

Hier ist meine Frage:Fehler mit Entity Framework .Any() filtern

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

Kontext:

  • Users ist IQueryable<User>. (EF Objekt eingestellt)
  • ist ein Location Objekt.
  • Counties ist ein ICollection<MiniLocation>.

Was ich versuche zu tun:

Return alle Benutzer, wenn eine der Counties für diese Standorte haben eine LocationID einer der Grafschaften zu dem gesuchten Ort gehören.

Beispiel:

Suche nach New York City (LocationID = 1. County1LocationId = 2)

Benutzer: Bob. Standorte: Soho. County1LocationId = 2. County2 LocationId = 3.

Das ist also ein Treffer. (Weil Soho eine County mit einem LocationID von 2, und so auch NYC)

Fehler i erhalten:

kann nicht einen konstanten Wert des Typs 'xxx.xxx.Locations.MiniLocation' schaffen . Nur primitive Typen ('wie Int32, String und Guid') werden in diesem Kontext unterstützt.

Irgendwelche Ideen?

+0

Haben Sie versucht, mit .join()? –

Antwort

1

Diese MSDN page besagt, dass dieses Konstrukt nicht unterstützt wird. Sie können this method für .Net 3.5 Linq zu Entities verwenden, um die Verwendung von Any zu ersetzen.

+0

Ich bin auf .NET 4. Okay, ich verstehe den Fehler, aber nicht die vorgeschlagene Lösung in der Verbindung, die Sie zur Verfügung gestellt. Weitere Hinweise/Beispiele? – RPM1984

0

Sie müssen eine Liste der Standort ID erstellen können durchsucht werden.

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

Dann können Sie Contains auf folgende Weise verwenden:

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

Ich denke nicht, dass das stimmt. zuallererst nimmt '.Contains' nur' T' oder 'IEnumerable '. Zweitens würde das nur dort übereinstimmen, wo einer der Landkreise die Orts-ID des gesuchten Orts enthält, während ich möchte, wo einer der Landkreise irgendwelche der durchsuchten Orte-Landkreise enthält. Kompliziert, ich weiß. :) – RPM1984

+0

Aktualisiert ........ –