LINQ GroupBy返回List作为结果

Dan*_*Dan 2 c# linq

我有一个包含Transaction对象的List.我想要做的是找到具有相同transaction.Buyer.UserID的所述List中的事务,并将它们组合成列表列表.

每个Sub-List项将包含多个事务对象,其中transaction.Buyer.UserID是相同的.

到目前为止我所拥有的是:

            var _ordersToCombine = 
            _transactions.GroupBy(transaction => transaction.Buyer.UserID).Select(transaction => transaction);
Run Code Online (Sandbox Code Playgroud)

我进来的是:

List<Transaction>:
    Transaction { Buyer.UserID = "User1" ...}
    Transaction { Buyer.UserID = "User2" ...}
    Transaction { Buyer.UserID = "User1" ...}
    Transaction { Buyer.UserID = "User3" ...}
    Transaction { Buyer.UserID = "User4" ...}
    Transaction { Buyer.UserID = "User3" ...}
Run Code Online (Sandbox Code Playgroud)

我期望它返回的是:

List<List<Transaction>>:
    List<Transaction>:
        Transaction { Buyer.UserID = "User1" ...}
        Transaction { Buyer.UserID = "User1" ...}
    List<Transaction>:
        Transaction { Buyer.UserID = "User3" ...}
        Transaction { Buyer.UserID = "User3" ...}
Run Code Online (Sandbox Code Playgroud)

...并且还从主列表中删除这些事务,因此在此示例中,主列表将如下所示:

List<Transaction>:
    Transaction { Buyer.UserID = "User2" ...}
    Transaction { Buyer.UserID = "User4" ...}
Run Code Online (Sandbox Code Playgroud)

Linq对我来说是一个全新的概念,我试图让自己理解.

smi*_*ech 5

只需使用它进行分组:

var results = transactions
.GroupBy(p => p.Buyer.UserID)
.Where(x=>x.Count()>1)
.Select(x=> new List<Transaction>(x));
Run Code Online (Sandbox Code Playgroud)

这应该List<List<Transaction>从主列表中产生重复的用户.在迭代它时,LINQ不是修改集合的正确工具.如果你真的需要它,做:

var results = transactions.ToList()
.GroupBy(p => p.Buyer.UserID)
.Where(x=>x.Count()>1)
.Select(x=> 
{
    foreach(var item in x)
        transactions.Remove(item);
    return new List<Transaction>(x);
});
Run Code Online (Sandbox Code Playgroud)

请注意,事务列表的副本用于执行查询(transactions.ToList()并且删除操作在原始列表上进行.希望有帮助.