Подтвердить что ты не робот

Оператор Linq to SQL: WHERE IN

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')

Основываясь на приведенной выше (гипотетической) схеме и данных SQL, я хочу использовать Linq to SQL для получения всех результатов, где имя в значения массива.

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

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

Результаты должны включать John и Sarah. С этой информацией я могу добавить записи, которые нужно добавить, в этом случае Cassandra.

Я не хочу загружать все имена, потому что список может быть чрезвычайно длинным.

4b9b3361

Ответ 1

Вы можете использовать names.Contains():

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

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

Ответ 2

Вы можете использовать метод расширения Contains:

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

Ответ 3

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