2009-08-19 4 views
3

Je ne sais pas comment décrire le titre mieux (donc n'hésitez pas à changer) mais essntial je veux produire l'équivilent de l'instruction suivante dans LINQ to SQL :Est-ce que LINQ to SQL supporte l'instruction "in" t-sql

select * from products where category in ('shoes','boots') 

les champs seront à venir de la chaîne de requête essentiellement (plus sûr que cela, mais pour faciliter l'explication) à savoir

string[] myfields = request.querystring["categories"].split(','); 

Merci

Répondre

15

Oui, vous utilisez Contains:

db.Products.Where(product => myFields.Contains(product.Category)) 

aka

from product in db.Products 
where myFields.Contains(product.Category) 
select product 
0

En théorie, vous utiliseriez contient:

var productList = from product in context.Products 
    where myfields.contains(product.category) 
    select product 

Cependant, vous aurez besoin de tester - je semble me rappeler l'existence d'un bogue dans la Optimiseur Linq2Sql en essayant de gérer la liste <> et les valeurs de tableau utilisées comme ceci (cela peut ne se produire que si vous avez essayé de les convertir en IQueryable)

1

Comme d'autres l'ont mentionné, oui, il utilise la méthode .Contains. Pour bénéficier aux autres personnes aléatoires qui peuvent arriver ici via Bing (ou l'un des autres moteurs de recherche): Linq-To-Entities ne supporte pas la méthode .Contains dans la version actuelle. Toutefois, avec une méthode d'extension simple, vous pouvez le faire:
http://george.tsiokos.com/posts/2007/11/30/linq-where-x-in/