Исключить коллекцию из другого от lambda - PullRequest
2 голосов
/ 17 марта 2012

Это мой тип:

public class myType
 {
     public int Id { get; set; }
     public string name { get; set; }
 }

И есть 2 коллекции этого типа:

List<myType> FristList= //fill ;
List<myType> Excludelist= //fill;

И мне нужно исключить Excludelist из FristList что-то вродеследующее:

List<myType> targetList = 
FirstList.Where(m=>m.Id  not in (Excludelist.Select(t=>t.Id));

Что вы предлагаете о точном лямбда-выражении вышеупомянутого запроса?

1 Ответ

14 голосов
/ 17 марта 2012

Три варианта. Один без изменений:

var excludeIds = new HashSet<int>(excludeList.Select(x => x.Id));
var targetList = firstList.Where(x => !excludeIds.Contains(x.Id)).ToList();

Также можно переопределить Equals и GetHashCode и использовать:

var targetList = firstList.Except(excludeList).ToList();

Или напишите IEqualityComparer<MyType>, который сравнивается по идентификаторам, и используйте:

var targetList = firstList.Except(excludeList, comparer).ToList();

Второй и третий варианты, безусловно, лучше IMO, особенно если вам нужно выполнять такую ​​работу в разных местах.

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