Linq InnerJoin 4桌

时间:2016-01-19 19:21:25

标签: c# entity-framework linq

我的目标是返回仅包含来自特定商家的orderItem的订单列表。我目前的解决方案是遍历每个订单,然后遍历每个订单商品和每个商品。我想这不是最好的做法,但我很难弄清楚如何构建单个查询来检索特定于商家的订单。

我有4张桌子

商家(id字段为merchantID)

订单(id字段为orderID)

orderItems(id字段是orderItemID,FK listingID)

列表(id字段是listingID和FK merchantID)

2 个答案:

答案 0 :(得分:1)

您可以使用.Any()来帮助您到达目的地:

var ordersFromMerchant = db.Orders
    .Where(o => o.Items.Any(oi => oi.Listing.merchantID = 10);

我已经对导航属性的名称做了假设,但如果它们不匹配,您应该能够对其进行调整。

如果您更喜欢linq语法,可以使用:

var ordersFromMerchant = from o in db.Orders
    join oi in db.orderItems on o.orderID equals oi.orderID
    join l in db.listings on oi.listingID equals l.listingID
    where l.merchantID = 10
    select o;

答案 1 :(得分:1)

我不知道你的结构,但这样的事情应该有效。

var query = from o in orders
            join oi in orderItems on o.id equals io.orderID
            join l in listings on oi.listingID equals l.id
            where l.merchantID == merchantID
            select o;