2013-08-14 14 views
13
CREATE TABLE [MyNames] 
(
    [ID] INT IDENTITY PRIMARY KEY, 
    [Name] NVARCHAR(255) NULL 
) 

INSERT INTO [MyNames] VALUES ('John') 
INSERT INTO [MyNames] VALUES ('Jane') 
INSERT INTO [MyNames] VALUES ('Peter') 
INSERT INTO [MyNames] VALUES ('Montgomery') 
INSERT INTO [MyNames] VALUES ('Sarah') 

Na podstawie powyższego schematu (hipotetycznej) SQL i danych, chcę użyć LINQ to SQL, aby uzyskać wszystkie wyniki, gdzie nazwa jest w wartości tablicy.LINQ to SQL: gdzie w rachunku

string[] names = {"John", "Cassandra", "Sarah"}; 

var results = (from n in db.Names 
       where n.Name **in names** 
       select n).ToList(); 

Wyniki powinny zawierać John i Sarah. Dzięki tym informacjom mogę następnie dodać wpisy, które należy dodać, w tym przypadku Cassandra.

Nie chcę ładować wszystkich nazw, ponieważ lista może być wyjątkowo długa.

Odpowiedz

20

Można użyć names.Contains():

string[] names = {"John", "Cassandra", "Sarah"}; 

var results = (from n in db.Names 
       where names.Contains(n.Name) 
       select n).ToList(); 
+0

Dzięki! Tak oczywista odpowiedź. Nie mogę uwierzyć, że nigdy o tym nie myślałem. – cbillowes

3
var results = (from n in db.Names 
       where names.Any(x=>x == n.Name) 
       select n).ToList(); 
4

Można użyć metody Contains rozszerzenia:

var results = (from n in db.Names 
       where names.Contains(n.Name) 
       select n).ToList();