具有多个连接的复杂Linq查询

时间:2012-05-17 16:50:10

标签: linq

我对Linq并不熟悉,我需要创建一个查询来获取以下数据:

表格:

产品
ID,
GroupId的,
产品代码,
SpecificCode
...

ProductGroup
ID,
状态
...

规则
ID,
GroupId的,
产品代码,
SpecificCode
...

参数
产品代码:字符串,
SpecificCode:字符串

要求
1.获取Status = Active所有的ProductGroups,以及与至少一个ProductCode和SpecificCode匹配参数的Product相关联的产品组。

2.获取与这些组相关联的所有规则。

3.在规则本身上筛选出没有匹配的Productcode + SpecificCode的规则。

我已经分多步编写了它,因为这有助于我理解这个过程。它可能在一个查询中 - 我不知道。 TBH我真的不在乎我是否需要多个查询,我只需要它来获得正确的结果集,没有重复(这是我真正在努力的地方)。

非常感谢!

2 个答案:

答案 0 :(得分:0)

        from pg in ProductGroup        
        where pg.status == "active" 
        select new
        {
        ProductGroup = pg,
        Products = (from p in Product
              && p.GroupId = pg.Id  
              && p.productcode == inputproductcode 
              && p.specificcode == inputspcode).ToList(),

        Rules = pg.Rules.Where(r=>r..productcode == inputproductcode && r.specificcode == inputspcode).ToList()
        }

这样的事情应该有效。

答案 1 :(得分:0)

这个怎么样?假设您的媒体资源为ProductsProductGroupsRules

var productGroups = (from p in Products
                     join pg in ProductGroups on p.GroupId equals pg.Id
                     where pg.Status = "Active"
                     select new
                            {
                                p.ProductCode,
                                p.SpecificCode,
                                Rules = Rules.Where(r => r.ProductCode == p.ProductCode
                                    && r.SpecificCode == p.SpecificCode).ToList()
                            })
                     .ToList();