我的查询如下。可以将产品分配给多个产品,因此在此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();
这是表格结构,如果它有帮助
答案 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;
}