필터 식을 기반으로 두 목록을 비교하려고합니다. 일반 메서드에 대해 람다 식을 구성하는 방법을 모릅니다. 아래 코드를 참조하십시오. 또는 LINQ에서 교차를 통해 더 쉬운 방법이 있습니까?식/lambda를 사용하여 두 목록을 비교/필터링하는 일반적인 방법
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Data d1 = new Data {Id = 1, Name = "One"};
Data d2 = new Data { Id = 2, Name = "Two" };
Data d3 = new Data { Id = 3, Name = "Three" };
Data d4 = new Data { Id = 1, Name = "One" };
Data d5 = new Data { Id = 2, Name = "Two" };
Data d6 = new Data { Id = 4, Name = "Four" };
List<Data> original = new List<Data> {d1, d2, d3};
List<Data> filterItems = new List<Data> {d4, d5, d6};
List<Data> result = original.FilterDataList(filterItems);
//How to call this method?
List<Data> genericCall = original.FilterList<Data>(filterItems, data => data.Id ?????????????)
}
}
public class Data
{
public long Id;
public string Name;
}
public static class Extensions
{
public static List<Data> FilterDataList(this List<Data> sourceList, List<Data> filterOutItems)
{
return sourceList.Where(p => filterOutItems.All(l => l.Id != p.Id)).ToList();
}
public static List<T> FilterList<T>(this List<T> sourceList, List<T> filterOutItems, Func<T, bool> filterExpression)
{
return sourceList.Where(p => filterOutItems.All(filterExpression)).ToList();
}
}
}
아하 !! Except 확장 기능은 내가 필요로하는 것입니다! 그것 주셔서 감사합니다 :-) 예 FilterList는 (x, y) => x.Id! = y.Id는 Func으로 작업하지 않습니다. –