Linq查询建议

时间:2011-09-15 23:51:15

标签: c# .net linq

我的查询如下。可以将产品分配给多个产品,因此在此linq查询之后,我将获得多个产品。如何更改它以便我只能看到一个产品。

var list = (from p in Products from cat in p.Product_SubCategory_Mappings
       let trend = CustomFunction(p.ID) where cat.SubCategory.CategoryId == 19 && 
       trend > 100 select new { Product = p, p.Vendor, trend}).ToList();

这是表格结构,如果它有帮助

  1. 产品 - > ProductID |名称|价格|厂商ID
  2. 类别 - > CategoryID |标签
  3. 子类别 - > SubCategoryID |标签| PARENTID
  4. Product_SubCategory_Mapping - > ProductID | SubCategoryID

2 个答案:

答案 0 :(得分:2)

Product.Product_SubCategory_Mappings上进行子选择时,您将结果集中的行数乘以每个产品的子类别映射数。这意味着产品将被复制。

为避免这种情况,您可以use the Any extension method代替子选择。

这样的事情:

var list = (from p in Products
            let trend = CustomFunction(p.ID)
            let cats = p.Product_SubCategory_Mappings
            where trend > 100
                && cats.Any(cat => cat.SubCategory.CategoryId == 19)
            select new { Product = p, p.Vendor, trend }
            )
            .ToList();

答案 1 :(得分:1)

这可能是工作

 public IQueryable<Product> GetProduct()
        {

            var list = (from p in Products
                        from cat in p.Product_SubCategory_Mappings
                        let trend = CustomFunction(p.ID)
                        where cat.SubCategory.CategoryId == 19 &&
                              trend > 100
                        select new {Product = p, p.Vendor, trend}).Distinct();
            return list;
        }