Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将连接两个对象的LINQ查询语法转换为方法语法?_C#_Linq - Fatal编程技术网

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);
            }