我有下面的列表和查询表达式来获取不同的列表。
List<LinqTest> myList = new List<LinqTest>();
myList.Add(new LinqTest() { id = 1, value = "a" });
myList.Add(new LinqTest() { id = 1, value = "b" });
myList.Add(new LinqTest() { id = 2, value = "c" });
myList.Select(m => new { m.id}).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
我已经提到了下面SO链接链接的代码。即使在使用distinct()之后,我也获得了3个具有重复值的记录。可能是什么原因?
小智 7
您在调试时看到的3条记录是您现有的列表。我认为您错过的只是一项任务。
List<LinqTest> myList = new List<LinqTest>();
myList.Add(new LinqTest() { id = 1, value = "a" });
myList.Add(new LinqTest() { id = 1, value = "b" });
myList.Add(new LinqTest() { id = 2, value = "c" });
// not sure why new {m.id} was used in this context
List<int> distinctList = myList.Select(m => m.id).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
在您的情况下,该Distinct()方法使用匿名类型对象的默认相等比较器。因此,结果是预期之外的。如果你想获得独特的id价值使用
List<int> ListOfIDs = myList.Select(m => m.id).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
如果您想获取自定义类型的不同对象,那么您需要实现 IEquatable通用接口并为该类型提供您自己的GetHashCode和方法。Equals有关详细信息,请参阅MSDN。
| 归档时间: |
|
| 查看次数: |
3277 次 |
| 最近记录: |