我必须以元组的格式返回结果,但是由于嵌套的foreach循环,我不能使用yield return(tuple)。我该怎么办?
public static IEnumerable<(string category, IEnumerable<Product> productsName)> GroupJoinQuery()
{
string[] categories =
{
"Vegetables",
"Dairy Products",
"Seafood"
};
List<Product> products = Products.ProductList;
var q = categories.GroupJoin(products, c => c, p => p.Category, (c, ps)
=> new { Category = c, Products = ps });
foreach (var v in q)
{
Console.WriteLine($"{v.Category}:");
foreach (var p in v.Products)
{
Console.WriteLine($" {p.ProductName}");
}
}
}
1条答案
按热度按时间b4qexyjb1#
由于您希望为每个类别返回一个元素,元组的第二个组成部分是与该类别匹配的
IEnumerable
个产品,因此可以使用以下代码:请注意
ToArray()
的用法。如果products
最终由数据库填充,并且在释放所需的上下文之后迭代IEnumerable
,则会出现运行时异常。(将其复制到内存中)。对于中等大小的结果,这是可接受的策略。如果结果集很大,您可能希望考虑一种不同方法。