我有一个包含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对我来说是一个全新的概念,我试图让自己理解.
只需使用它进行分组:
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()并且删除操作在原始列表上进行.希望有帮助.