2008-11-25 9 views
2

Ours avec moi, je commence: Comment puis-je sélectionner plusieurs éléments à l'aide d'une recherche ... EN ... type de clause comme dansComment faire une clause WHERE ... IN ... dans LinqToSql?

select * from orders where orderid in (1, 4, 5) 

à LinqToSql? Je préférerais ne pas avoir une expression lambda puisqu'ils me font peur. Merci d'avance!

Répondre

13

LINQ a "Contient" qui est comme "IN" mais exprimé dans l'autre sens - un élément n'est pas "dans" un ensemble, un ensemble "contient" un élément.

int[] validIds = { 1, 4, 5 }; 
var query = from order in db.Orders 
      where validIds.Contains(order.Id) 
      select order 

Ceci est plus simplement exprimé (OMI) avec un lambda cependant:

int[] validIds = { 1, 4, 5 }; 
var query = db.Orders.Where(order => validIds.Contains(order.Id)); 

Je me rends compte lambdas sont « nouvelles » et donc effrayant dans une certaine mesure, mais il est vraiment bien la peine attrapant les avec vos deux mains. Ils sont adorables.

+0

vous êtes l'homme jon, au sérieux. Merci pour votre réponse. – Mats

+0

Ooops ... J'ai complètement oublié la méthode d'extension Contain dans ma réponse ... –

0
int[] arry = new int[] {1,4,5}; 

var q = from r in orders 
     where Array.IndexOf(array, orderid) != -1 
     select r; 

ou

List<int> lst = new List<int>(new int[] {1,4,5}); 
var q = from r in orders 
     where lst.Contains(orderid); 
     select r; 
+0

euh, je suppose que j'ai toujours un problème ici: je reçois une exception en essayant de lancer un foreach sur le résultat. malheureusement, je n'ai qu'un texte d'exception en allemand, mais il est écrit quelque chose comme ça que l'expression "Int32 IndexOf [Int32] (Int32 [, Int32]" ne peut pas être reconnue. – Mats

+0

LINQ to SQL ne connaît pas IndexOf, mais connaît Contient. –

Questions connexes