2010-02-04 14 views
6

Przechodzenie wstecz z SQL na LINQ2SQL jest czasami dość proste. Poniższe oświadczenieJak wygenerować klauzulę WHERE ... IN za pomocą LINQ2SQL?

SELECT user FROM users WHERE lastname='jones' 

przekłada się dość łatwo w

from u in users where u.lastname='jones' select u 

Ale w jaki sposób uzyskać następujące SQL generowane?

SELECT user FROM users WHERE lastname IN ('jones', 'anderson') 

Odpowiedz

11

Musiałem zrobić trochę wyszukiwania, aby znaleźć to i pomyślałem, że może być przydatne dla innych.

List<string> names = new List<string>() { "jones", "anderson" }; 

from u in users where names.Contains(u.lastname) select u 
+0

Idziesz do napotkasz problem z 'Contains' wyrażenie nie będąc translateable do SQL, tak że nie będzie działać, jeśli użytkownik jest' System.Data.Linq.Table' na LinqToSql DataContext. –

+1

@klausbyskov: To nie jest prawda. Entity Framework/LINQ to Entities nie może tego zrobić w .NET 3.5, ale LINQ do SQL z przyjemnością zamieni to na SQL. Jedynym problemem jest to, że liczba elementów w klauzuli IN() (liczba elementów na liście "nazwa") jest ograniczona, z powodu ograniczeń ADO.NET. – Steven

+0

@klausbyskov: Właściwie działa to dobrze - uruchomiłem kod i przyjrzałem się wynikowi w programie profilującym SQL. Czy oddałeś mi zniżkę? – Jedidja

Powiązane problemy