C# 如何避免匿名类型在LINQ中重复?
我正在尝试将C# 如何避免匿名类型在LINQ中重复?,c#,linq,C#,Linq,我正在尝试将数据表转换为字符串和整数字典。DataTable有重复项,我编写了以下代码: Dictionary<string, short> data = dt.AsEnumerable() .Select(item => new { Key = item.Field<string>
数据表
转换为字符串和整数字典。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
Product2 3
Product4 3
我的代码出错了,因为Distinct()考虑了匿名类型中的所有可用属性。是否有办法实现此linq或覆盖Distinct()的默认行为?您可以根据文档提供IEqualityComparer到
Distinct()
的实现:
您可以为匿名类型创建这样一个相等比较器,如此堆栈溢出回答中所述:您可以根据以下文档提供IEqualityComparer到
Distinct()
的实现:
您可以为匿名类型创建这样一个相等比较器,如此堆栈溢出回答中所述:尝试此方法(按键区分):
Dictionary data=dt.AsEnumerable()
.选择(项目=>新建){
Key=项目字段(“产品名称”),
值=项目字段(“类型id”)
})
.GroupBy(x=>x.Key)
.Select(x=>x.First())
.ToDictionary(dr=>dr.Key,dr=>dr.Value,StringComparer.OrdinalIgnoreCase);
试试这个(按键区分):
Dictionary data=dt.AsEnumerable()
.选择(项目=>新建){
Key=项目字段(“产品名称”),
值=项目字段(“类型id”)
})
.GroupBy(x=>x.Key)
.Select(x=>x.First())
.ToDictionary(dr=>dr.Key,dr=>dr.Value,StringComparer.OrdinalIgnoreCase);
确定它是否不同涉及多少属性?只是钥匙吗?是的,就是钥匙。我需要获得所有不同的产品名称和相应的类型id(这可能是第一个出现的键)。在确定它是否不同时涉及多少属性?只是钥匙吗?是的,就是钥匙。我需要得到所有不同的产品名称和相应的类型id(这可以是第一个出现的密钥)。是的。这也是我要建议的。是的。这也是我要建议的。
Product1 1
Product2 3
Product4 3
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);