Как сделать предложение WHERE...IN... в LinqToSql?
Терпите меня, я начинаю: как выбрать несколько элементов, используя предложение WHERE...IN... типа, как в
select * from orders where orderid in (1, 4, 5)
в LinqToSql? Я бы предпочел не иметь лямбда-выражения, так как они меня пугают. Заранее спасибо!
2 ответа
Решение
LINQ имеет "Contains", которое похоже на "IN", но выражается наоборот: элемент не находится "в" наборе, набор "содержит" элемент.
int[] validIds = { 1, 4, 5 };
var query = from order in db.Orders
where validIds.Contains(order.Id)
select order
Это проще выразить (IMO) с помощью лямбды:
int[] validIds = { 1, 4, 5 };
var query = db.Orders.Where(order => validIds.Contains(order.Id));
Я понимаю, что лямбды "новы" и, следовательно, в какой-то степени страшны, но действительно стоит захватить их обеими руками. Они прекрасны.
int[] arry = new int[] {1,4,5};
var q = from r in orders
where Array.IndexOf(array, orderid) != -1
select r;
или же
List<int> lst = new List<int>(new int[] {1,4,5});
var q = from r in orders
where lst.Contains(orderid);
select r;