我正在尝试获取一组符合特定条件的记录。 想象一下,我有一个订单列表,每个订单都有一个嵌套帐户,有点像这样:
var orders = [{
account: {
id: 1
}
}, {
account: {
id: 1
}
}, {
account: {
id: 2
}
}, {
account: {
id: 2
}
}, {
account: {
id: 1
}
}, {
account: {
id: 4
}
}, {
account: {
id: 3
}
}];
我想使用LINQ根据帐户ID获取所有不同的帐户。 我想我可能会做类似的事情:
var accounts = results.Select(m => m.Account).GroupBy(m => m.AccountNumber).Distinct();
但这似乎不起作用。 有人可以帮助我吗?
答案 0 :(得分:2)
var accounts = results
.Select(m => m.Account)
.GroupBy(m => m.AccountNumber)
.Select(x => x.First());
更好,在Account类中实现IEquatable<T>
:
class Account : IEquatable<Account>
{
public int AccountNumber { get; set; }
// more members....
public bool Equals(Account another) => this.AccountNumber == another.AccountNumber;
public override int GetHashCode() => this.AccountNumber;
}
然后简单有效:
results.Select(m => m.Account).Distinct();
答案 1 :(得分:0)
results.Select(m => m.Account).GroupBy(m => m.AccountNumber)
.Select(g => g.First()).ToList()