I have a class with this structure:
public class BusinessObject
{
public int Column1 { get; set; }
public int Column2 { get; set; }
public string Column3 { get; set; }
public int Column4 { get; set; }
}
and I have a collection of objects of this type call BusinessObjectCollection. If I want an array of values that are distinct for only Column2... what must I do?
What if I dont know the property开发者_如何学C that I need... so if i have ColumnTitle as a String... and whatever the value of ColumnTitle... I want the distinct values for that property
Assuming you want the result to be an IEnumerable<BusinessObject>
, so that Column2
is only used for implementing distinctness, there are two options:
- Implement
IEqualityComparer<BusinessObject>
in a way which usesColumn2
, and pass that intoDistinct
Use
DistinctBy
from MoreLINQ:var distinct = original.DistinctBy(x => x.Column2);
Obviously the second is simpler, but it does require an extra library (or copying just the code for DistinctBy
).
This is the type of stuff that makes me really appreciate LINQ:
int[] distinctColumn2 = (from x in BusinessObjectCollection select x.Column2).Distinct().ToArray();
Can use the pure LINQ distinct.
var result = (from bo in lbo select bo.Column2).Distinct();
Where lbo is a collection of BusinessObjects.
Regards.
精彩评论