如何避免匿名类型的 LINQ 重复项
本文关键字:LINQ 类型 何避免 | 更新日期: 2023-09-27 18:36:02
我正在尝试将DataTable
转换为字符串和整数字典。数据表有重复项,我编写了以下代码:
Dictionary<string, short> data = dt.AsEnumerable()
.Select(item => new {
Key = item.Field<string>("product_name"),
Value = item.Field<short>("type_id")
})
.Distinct()
.ToDictionary(dr => dr.Key, dr => dr.Value, StringComparer.OrdinalIgnoreCase);
当我有这样的数据时:
Product1 1
Product1 2
Product2 3
Product4 3
结果应该是这样的:
Product1 1
Product2 3
Product4 3
我的代码出错了,因为 Distinct() 考虑匿名类型中的所有可用属性。有没有办法实现这个 linq 或覆盖 Distinct() 的默认行为?
试试这个(按键区分):
Dictionary<string, short> data = dt.AsEnumerable()
.Select(item => new {
Key = item.Field<string>("product_name"),
Value = item.Field<short>("type_id")
})
.GroupBy(x=>x.Key)
.Select(x=>x.First())
.ToDictionary(dr => dr.Key, dr => dr.Value, StringComparer.OrdinalIgnoreCase);
您可以根据文档提供IEqualityComparer的实现Distinct()
:https://msdn.microsoft.com/library/bb338049(v=vs.100).aspx
您可以为匿名类型创建此类相等比较器,如以下堆栈溢出答案中所述:https://stackoverflow.com/a/1071637/1675729