c# - LINQ GroupBy 返回列表作为结果

标签 c# linq

我有一个包含事务对象的列表。我想要做的是在上述列表中找到具有相同 transaction.Buyer.UserID 的交易,并将它们组合到一个列表列表中。

每个子列表项目将包含多个交易对象,其中 transaction.Buyer.UserID 相同。

我目前拥有的是:

            var _ordersToCombine = 
            _transactions.GroupBy(transaction => transaction.Buyer.UserID).Select(transaction => transaction);

我进来的是什么:

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" ...}

我期望它返回的是:

List<List<Transaction>>:
    List<Transaction>:
        Transaction { Buyer.UserID = "User1" ...}
        Transaction { Buyer.UserID = "User1" ...}
    List<Transaction>:
        Transaction { Buyer.UserID = "User3" ...}
        Transaction { Buyer.UserID = "User3" ...}

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

List<Transaction>:
    Transaction { Buyer.UserID = "User2" ...}
    Transaction { Buyer.UserID = "User4" ...}

Linq 对我来说是一个新概念,我正在努力理解。

最佳答案

只需使用它进行分组:

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

这应该会产生您的 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);
});

请注意,创建了事务列表的副本以执行查询( transactions.ToList() 并在原始列表上进行删除操作。希望对您有所帮助。

关于c# - LINQ GroupBy 返回列表作为结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28212262/

相关文章:

c# - 编写谓词以使用 Entity Framework 搜索存储库时出现问题(相当于在 SQL 中使用 Join)

c# - 转换为 Lambda 表达式

c# - 使用 LINQ(夹具列表)形成锦标赛表

c# - 如何确定字符串是否包含字符串列表的任何匹配项

c# - 使用 LINQ 在类中查找对象

c# - 我可以发送图像和 rar 文件,但这些文件已被 asp.net 损坏?

c# - GZip/Deflate 压缩适用于 .NetCore 2.0,但不适用于 .Net 4.6.2

c# - 为什么我不能在 WinRT 中从 AppData 读取 XML?

c# - 使用 count() 优化 linq 查询

linq - 使用 Fluent 语法的 LINQ 嵌套 GroupBy