C# 如何将连接两个对象的LINQ查询语法转换为方法语法?
如何以方法语法形式执行此操作:C# 如何将连接两个对象的LINQ查询语法转换为方法语法?,c#,linq,C#,Linq,如何以方法语法形式执行此操作: foreach (var o in from o in orders from oi in o.OrderItems where oi.ProductName == "Widgets" select o.OrderID) Console.WriteLine("{0}", o); 已尝试此操作,但不起作用: foreach (var o in ord
foreach (var o in from o in orders
from oi in o.OrderItems
where oi.ProductName == "Widgets"
select o.OrderID)
Console.WriteLine("{0}", o);
已尝试此操作,但不起作用:
foreach (var o in orders
.SelectMany(o => o.OrderItems, (o, oi) => new {<<idk what to put here>> })
.Where(oi => oi.ProductName == "Widget"))
{
Console.WriteLine("WIDGET: {0}", o.OrderID);
}
方法语法如下所示:
orders.Where(o=>o.OrderItems.Any(oi=>oi.ProductName == "Widgets")).Select(o=>o.OrderID)
这是你问题的解决办法。 您应该使用如下内容:
foreach (var item in orders.SelectMany(x => x.OrderItems).Where(y => y.ProductName == "Widgets"))
{
Console.WriteLine("{0}", item.OrderId);
}
我已经为您的问题创建了一个工作示例:
希望这能解决你的问题。谢谢 使用select many时如何?看看我试过但不起作用的一个,你有查询语法,你想把它转换成linq语法,这就是我想要的。尽管在foreach主体的“item.OrderId”中,我找不到OrderId属性。它连接到子对象而不是父对象。我只看到OrderItems的属性:(我做了一些修改,终于成功了!orders.SelectMany(o=>o.OrderItems,(o,oi)=>new{o.OrderID,oi.ProductName})。其中(oi=>oi.ProductName==“Widgets”)很好,或者您可以这样做:
foreach(orders中的var项。SelectMany(x=>x.OrderItems)。其中(y=>y.ProductName==“Widgets”)。选择(z=>OrderID)){Console.WriteLine(“{0}”,item);}
我不再需要最后的select部分,因为它已经在工作了,我需要尽可能简单的代码。顺便说一句,谢谢
foreach (var item in orders.SelectMany(x => x.OrderItems).Where(y => y.ProductName == "Widgets"))
{
Console.WriteLine("{0}", item.OrderId);
}