лямбда-расширение для объединения списков - PullRequest
0 голосов
/ 03 июня 2009

как мне использовать второе выражение, чтобы выбрать только те, которые имеют идентификатор из первого?

 var list1= from x in objects select x.id;


 results=results.Where(r=>r.id==  ????  )  

Я хочу, чтобы результаты были только с идентификатором из списка A

ТИА

РЕДАКТИРОВАТЬ: я исправлен, была другая проблема, вызывающая проблему, о которой я буду спрашивать отдельно.

Ответы [ 6 ]

4 голосов
/ 03 июня 2009

Немного догадываюсь (не пробовал его запускать), но:

var filteredResults = from obj in objects 
                      join result in results on obj.id equals result.id
                      select result;

Обратите внимание, что это должно заменить обе строки кода, которые у вас есть в вашем вопросе.

4 голосов
/ 03 июня 2009
results = results.Where(r => list1.Contains(r.id));
4 голосов
/ 03 июня 2009

Вот так ...

results.Where(r=>list1.Contains(r.id))
2 голосов
/ 03 июня 2009

Если вам нужна производительность (list.Contains () имеет сложность O (n)), вы можете пойти с

var ids = objects.ToDictionary(o => o.id);

results.Where(o => ids.ContainsKey(o.id));
0 голосов
/ 03 июня 2009

Если вам всегда нужен только идентификатор первого элемента, вы можете сохранить его в переменной и использовать для лямбда-выражения

var results= from x in objects select x.id;
int firstID = results.First().id ;
results=results.Where(r=>r.id==  firstID  )

Или используйте непосредственно так:

var results= from x in objects select x.id;
results=results.Where(r=>r.id==  results.First().id  )
0 голосов
/ 03 июня 2009

Может быть, вы хотите этого тогда?

results.Where (r => objects.Any (o => o.id == r.id))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...