[英]Distinct in 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的庫,但是我不確定是否應該仍在beta中使用它,並且似乎不再開發它了。
再加上一個提取查詢的整個庫,我不確定是否值得。
也許這樣的事情可以幫助?
var distinctItems = items
.GroupBy(x => x.PropertyToCompare)
.Select(x => x.First());
這將同時填充“文本”和“值”字段:
myCollection.Select(x => x.Name).Distinct()
.Select(x => new MyClassToStore { Text = x, Value = x }).ToList();
如果只想返回不同的名稱,則可以使用:
myCollection.Select(x => x.Name).Distinct().ToList();
您可以實現您的類,以便linq不同運算符不使用默認的相等比較器。
class YourClass:IEquatable<YourClass>
{
...您的實施細節。 ...
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();
}
}
我個人建議您重寫運算符==和!=,並確定對象在其中的唯一性以及方式。 然后在集合上使用Distinct()調用。
您必須謹慎使用null值,請參閱Microsoft的Equals()重載指南和Operator ==(C#編程指南) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.