LINQ GroupBy and Distinct

时间:2017-06-22 11:34:27

标签: c# linq

我正在尝试获取一组符合特定条件的记录。 想象一下,我有一个订单列表,每个订单都有一个嵌套帐户,有点像这样:

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();

但这似乎不起作用。 有人可以帮助我吗?

2 个答案:

答案 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()