2010-04-02 7 views
5

Können Sie einer Entität im Entitätsrahmen eine "Oder" -Bedingung hinzufügen? Zum Beispiel so etwas wie:Hinzufügen oder Bedingung zu Entität in Entity Framework

Property1 == (1 oder 2 oder 3)

Die Botschaft, die ich erhalten, wenn der Wert von "1 || 2 || 3" oder „1,2 Putten , 3" oder "1, 2 oder 3" gibt diese Nachricht:

condition is not compatible with the type of the member 

Antwort

11

Sie tun müssen:

var results = entityCollection.Where(entity => entity.Property1 == 1 || entity.Property1 == 2 || entity.Property1 == 3); 
+0

Ich hatte davor Angst. Was ich tun möchte ist, dass die gleiche Bedingung immer dann stattfindet, wenn eine Abfrage gegen diese Tabelle ausgeführt wird, so dass ich nicht jedes Mal den obigen Code schreiben muss, wenn ich den Tisch berühre. –

+0

@Blakewell: Versetzen Sie die Abfrage in eine Dienstprogrammklasse, damit Sie sie erneut verwenden können. –

+1

@Reed Copsey: Vermissen Sie eine 'entity =>'? –

3

Haben Sie das nicht versucht, aber Sie könnten versuchen, contains zu verwenden. Nicht sicher über die Leistung, aber der Code ist kleiner:

int[] vals = new int[] { 1, 2, 3, 4 }; 
var results = entityCollection.Where(entity => vals.Contains(entity.Property1)); 
+1

'Contains' wird nur in EF4 unterstützt, das noch nicht veröffentlicht wurde (es kommt mit 12.Net 4 auf den 12. Platz). Es gibt einen Veröffentlichungskandidaten auf der MS-Website. –

+0

Ich habe noch nicht einmal darüber nachgedacht - ich benutze EF 4 schon eine Weile, also schien das normal zu sein. –

10

Sie sollten auch Prädikat Builder finden Sie unter: http://www.albahari.com/nutshell/predicatebuilder.aspx

Es ist ein bisschen weiter fortgeschritten ist, aber wenn Sie dynamisch Kette Bedingungen ist es die beste Wahl .

foreach (string keyword in keywords) 
    { 
    string temp = keyword; 
    predicate = predicate.Or (p => p.Description.Contains (temp)); 
    } 
Verwandte Themen