如何将连接两个对象的LINQ查询语法转换为方法语法?

时间:2017-06-09 06:19:40

标签: c# linq

如何以方法语法形式执行此操作:

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

尝试了这个但没有工作:

foreach (var o in orders
    .SelectMany(o => o.OrderItems, (o, oi) => new { o.OrderID, oi.ProductName })
    .Where(oi => oi.ProductName == "Widgets"))
{
    Console.WriteLine("{0}", o.OrderID);
}

最后我使用了这段代码并且它有效!

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_add_cg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:elevation="10dp"
        app:borderWidth="0dp"
        app:backgroundTint="@color/blue_4a90e2"
        android:src="@drawable/addbutton"/>

2 个答案:

答案 0 :(得分:4)

方法语法将是这样的:

orders.Where(o=>o.OrderItems.Any(oi=>oi.ProductName == "Widgets")).Select(o=>o.OrderID)

答案 1 :(得分:1)

这是您问题的解决方案。 你应该使用这样的东西:

foreach (var item in orders.SelectMany(x => x.OrderItems).Where(y => y.ProductName == "Widgets"))
            {
                Console.WriteLine("{0}", item.OrderId);
            }

我为您的问题创建了一个工作示例:Click Here

希望这能解决您的问题。谢谢!