public static class ExtendMethods { public class DifferenceDto<T> { public DifferenceDto() { FrontOnly = new List<T>(); BackOnly = new List<T>(); Common = new List<T>(); } /// <summary> /// 只有前面的列表有 /// </summary> public List<T> FrontOnly { get; set; } /// <summary> /// 只有后面的列表有 /// </summary> public List<T> BackOnly { get; set; } /// <summary> /// 共有部分 /// </summary> public List<T> Common { get; set; } } public static DifferenceDto<T> GetDifferenceDto<T>(this List<T> frontList, List<T> backList, Predicate<T> comparer,Func<T,bool> func) { var result = new DifferenceDto<T>(); foreach (var backitem in backList) { if (frontList.Exists(e=> func(backitem))) { result.Common.Add(backitem); } else { result.BackOnly.Add(backitem); } } foreach (var item in frontList) { if (!backList.Exists(comparer)) { result.FrontOnly.Add(item); } } return result; } }