linq的区别?

我想知道如何实现这一目标?

我想从一组对象中只获取不同的名称

MyObject a = new Object(); a.Name = 'One'; a.Value = '10'; MyObject b = new Object(); b.Name = 'One'; b.Value = '15'; MyObject c = new Object(); c.Name = 'Two'; c.Value = '10'; 

所以我想只回到这个名字。 在这种情况下,我不关心这个名称的价值。

所以我试过了

//将所有对象添加到集合中。

 myCollection.Disinct()..Select(x => new MyClassToStore() {Text = x.Name, Value = x.Name}).ToList()); 

但是我需要在属性级别而不是在对象级别进行区分。 所以我要回“一”和“两”。 现在我回来了“一个”,“一个”和“两个”。

我看到一个名为morelinq的库,但我不确定是否应该使用它,因为它仍处于测试阶段,似乎不再开发了。

加上一个提取查询的整个库我不确定它是否值得。

这会填充文本和值字段:

  myCollection.Select(x => x.Name).Distinct() .Select(x => new MyClassToStore { Text = x, Value = x }).ToList(); 

也许这样的事情会有所帮助吗?

 var distinctItems = items .GroupBy(x => x.PropertyToCompare) .Select(x => x.First()); 

如果您只想要返回不同的名称,可以使用:

 myCollection.Select(x => x.Name).Distinct().ToList(); 

我个人建议你覆盖operator ==和!=并确定对象在那里的独特性和原因。 然后对集合使用Distinct()调用。

您必须小心使用空值,请参阅Microsoft的重载等于指南()和运算符==(C#编程指南) 。

您可以实现您的类,以便linq distinct运算符不使用默认的相等比较器。

 class YourClass:IEquatable { 

…您的实施细节。 …

  public bool Equals(YourClass other) { if (Object.Equals(this, other)) { return true; } else { if(Name == other.Name && Value == other.Value) { return true; } else { return false; } } } public override int GetHashCode() { return Name.GetHashCode() ^ Value.GetHashCode(); } }