LinqtoSQL с предложением where, содержащим List? - PullRequest
1 голос
/ 16 октября 2010

Я исследовал это до смерти. Кажется, здесь уже есть некоторые ответы, но, откровенно говоря, ответы меня смущают. Поэтому я постараюсь сделать это как можно более простым.

Если у меня есть таблица в базе данных, «Люди» со столбцом имени (строка) и столбцом возраста (int). Затем я делаю что-то вроде этого:

List<int> ages = new List<int>();
ages.Add(39);
ages.Add(40);
var result = from p in People
where ages.Contains((int)p.Age)
select p;

Синтаксис проходит, но ничего не возвращает (как в VS2010, так и в LinqPad). Разве это не делает оператор SQL с предложением where, содержащим возраст в моем списке?

Простой ответ кому-нибудь? (В идеале, если бы вы могли изменить мой пример и заставить его работать ... это было бы здорово!)

1 Ответ

2 голосов
/ 16 октября 2010

если вы делаете это как Linq2SQL, похоже, вы делаете это правильно, чтобы обеспечить правильные прогнозы для SQL Server. Вы можете попробовать написать это немного по-другому, например:

var result = from p in People
where ages.Select(a => a).Contains(p.Age)
select p;

Вы говорите, что это ничего не возвращает. Вы уверены, что есть соответствующие записи для возврата? Кроме того, вы используете result где-нибудь? Запрос не будет выполнен, если вы не привязали его к чему-либо или не вызвали ToList() к какому-либо другому взаимодействию проектирования.

Образец из комментариев:

var ints = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var Merchandiser = (new DataClasses1DataContext()).Merchandisers;

var result = from m in Merchandiser 
where ints.Contains(m.Id) 
select m; 

foreach (var item in result) 
{ 
   Console.WriteLine(item.Name); 
} 

Console.ReadLine();
...