2009-08-19 9 views
3

Ich weiß nicht, wie man den Titel besser beschreibt (so frei zu ändern) aber Essntial Ich möchte das Äquivalenz der folgenden Anweisung in LINQ to SQL erzeugen :Unterstützt LINQ to SQL die t-sql "in" -Anweisung

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

die Felder im wesentlichen werden (als dies sicherer, aber für eine einfache Erklärung) aus der Abfrage-String kommt also

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

Dank

Antwort

15

Ja, Sie verwenden Contains:

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

aka

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

In der Theorie würden Sie verwenden enthält:

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

Allerdings werden Sie dies testen müssen - ich scheine es, daran zu erinnern um einen Fehler in der sein Linq2Sql Optimizer beim Versuch, mit List <> und Array-Werte, die so verwendet werden (möglicherweise nur aufgetreten, wenn Sie versucht haben, sie als IQueryable zu werfen)

1

Wie andere bereits erwähnt haben, tut es das mit der .Contains-Methode. Zum Vorteil der anderen zufälligen Personen, die über Bing (oder eine der anderen Suchmaschinen) hierher kommen: Linq-To-Entities unterstützt die Methode .Contains in der aktuellen Version nicht. Mit einer einfachen Erweiterungsmethode können Sie dies jedoch tun:
http://george.tsiokos.com/posts/2007/11/30/linq-where-x-in/