3
我们的代码库目前有以下EqualityComparer。如何使EqualityComparer与两个字段进行比较?
public static IEnumerable<TSource> Exclude<TSource, TKey>(this IEnumerable<TSource> first,
IEnumerable<TSource> second,
Func<TSource, TKey> keySelector,
IEqualityComparer<TKey> comparer = null)
{
comparer = comparer ?? EqualityComparer<TKey>.Default;
var set = new HashSet<TKey>(second.Select(keySelector), comparer);
return first.Where(item => set.Add(keySelector(item)));
}
而我们这样使用它。
// Take the current model and remove all items currently in the database... This leaves us with only records that need to be added.
var userBooksToAdd = model.UserBooks.Exclude(currentUserBooksFromDatabase, d => d.Id).ToList();
我们现在有必要来比较两个字段的数据库,在那里有一个COMPOSITE UNIQUE
基本上
if(currentBooksFromDatabase.BookId == model.BookId &&
currentBooksFromDatabase.UserId == model.Id)
我希望创建一个Exclude
过载,但我m真的超过了我的头与EqualityComparer
你没关系构建一个自定义的相等比较器吗?你不希望'Default'会以某种方式完成这项工作? –
会在键选择器中返回一个匿名对象吗? '排除(currentUserBooksFromDatabase,d => new {d.Id,d.Name})'只是一个猜测。 – Bort