2009-07-02 6 views

Antwort

3

Sie können Contains verwenden, um zu überprüfen, ob sich jede Benutzer-ID in dem Array befindet, das Sie haben.

int[] userIDs = ... 
var users = db.Users.Where(u => userIDs.Contains(u.UserID)); 
+0

das ist die Antwort. Die IENumerable.Contains() -Methode, die in LINQtoSQL-Ausdrücken verwendet wird, generiert eine SQL IN() -Funktion. – andy

0

Versuchen Sie folgendes:

using(var db=new MyDataContext()) 
{ 
    var users=db.Users.Where(u=>userIds.Contains(u.Id)); 
} 
+0

Ich möchte nur feststellen, dass dies eine ziemlich hässliche Abfrage erzeugt, die SET-Vergleiche (IN) verwendet, anstatt nur eine lange WHERE-Klausel zu erzeugen. – FlySwat

1

Wenn Sie stattdessen eine SET-Operation und Benutzer gekettet OPs vermeiden wollen, können Sie die PredicateBuilder verwenden, können Sie mit dem helfen.

Es geht ungefähr so:

var userIDs = new[] { 1, 2, 3, 4, 5 }; 

// build multiple OR expressions 
var filter = PredicateBuilder.False<User>(); 

foreach (var id in userIDs) { 
    filter = filter.Or(x => x.UserID == id); 
} 

// fetch data 
using (var db = new TheDataContext()) { 

    var users = db.Users.Where(filter); 

    // wham! - we have users now. 

} 

Werfen Sie einen Blick auf den Blog-Post zu verstehen, wie es funktioniert. Dies erzeugt im Grunde eine lange Verkettung von ORs für jede Benutzer-ID in der Liste, bevor sie an eine WHERE-Klausel übergeben wird.

Verwandte Themen