запрос linq для выбора из одного списка на основе другого - PullRequest
5 голосов
/ 17 сентября 2011
public class Test
{
  int i;
  string s;
}

List<Test> testList = new List<Test>(); //assume there are some values in it.

List<int> intList = new List<int>(){ 1,2,3};

Как мне сказать, получить items from testList where i is in intList используя linq для объектов.

что-то вроде List<Test> testIntList = testList.Where(t=>t.i in intList)

Ответы [ 2 ]

7 голосов
/ 17 сентября 2011

Технически это будет:

List<Test> testIntList = testList.Where(t => intList.Contains(t.i)).ToList();

Однако, это может быть медленно, если intList большое, так как List<T>.Contains выполняет поиск в O (n). Более быстрый подход - использовать HashSet<T>:

HashSet<int> intList = new HashSet<int>(){ 1,2,3 };
2 голосов
/ 17 сентября 2011

Это также было бы интересно и хорошо работало:

List<test> finalList = testList.Join(intList, 
                                     test => test.id,
                                     i => i,
                                     (t, i) => t).ToList();

Вы знаете, когда вы объединяете таблицы в SQL SELECT?Вот как это сделать, используя Linq to Objects.

...