C# Linq查询建议

C# Linq查询建议,c#,.net,linq,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

我有如下疑问。一个产品可以分配给多个产品,所以在这个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();
下面是表格结构,如果有帮助的话

  • 产品-->产品ID |名称|价格|供应商ID
  • 类别-->类别ID |标签
  • 子类别-->子类别ID |标签|父类别ID
  • 产品子类别映射-->产品ID子类别ID

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

    为了避免这种情况,您可以选择子选项而不是子选项

    大概是这样的:

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

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

    为了避免这种情况,您可以选择子选项而不是子选项

    大概是这样的:

    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();
    
    这可能是工作

     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;
            }
    
    public IQueryable GetProduct()
    {
    var list=(来自产品中的p)
    从p.Product_子类别_映射中的cat
    让趋势=自定义功能(p.ID)
    其中cat.SubCategory.CategoryId==19&&
    趋势>100
    选择new{Product=p,p.Vendor,trend}).Distinct();
    退货清单;
    }
    
    这可能是工作

     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;
            }
    
    public IQueryable GetProduct()
    {
    var list=(来自产品中的p)
    从p.Product_子类别_映射中的cat
    让趋势=自定义功能(p.ID)
    其中cat.SubCategory.CategoryId==19&&
    趋势>100
    选择new{Product=p,p.Vendor,trend}).Distinct();
    退货清单;
    }
    
    您所说的“多个业务”是指“多个供应商”吗?另外,您能给出一些实际的样本输出和所需的样本输出吗?很难说清您在寻找什么(例如,您是否希望根据供应商Id进行查询,以便只输出一个供应商?或者仅按供应商Id分组?)对不起,它的产品不是业务。现在您说的是“一个产品”,更容易说清您在问什么。当我认为你指的是一个供应商时,这很让人困惑,一个企业根本没有任何意义:)你说的“多个企业”是指“多个供应商”吗?另外,您能给出一些实际的样本输出和所需的样本输出吗?很难说清您在寻找什么(例如,您是否希望根据供应商Id进行查询,以便只输出一个供应商?或者仅按供应商Id分组?)对不起,它的产品不是业务。现在您说的是“一个产品”,更容易说清您在问什么。当我以为你指的是一家供应商时,这让人困惑,一家企业根本没有任何意义:)这不起作用。它显示错误cats不包含任何扩展方法的定义。@Sonesh:您必须为扩展方法包含一个
    using
    语句,以便对其进行编译。请参阅:(
    using System.Linq
    )我已经有了using语句,这就是上一个查询在页面上运行正常的原因。@Sonesh:Product\u SubCategory\u映射的类型是什么?如果它是一个
    IQueryable
    IEnumerable
    ,它应该可以工作。另外,您是否包含了对
    System.Core.dll
    的引用?检查我在之前的评论中链接的MSDN文档(现在是答案本身)。方法存在-使用方法有问题。Product_SubCategory_Mappings是SQL server中我正在查询的表。这不起作用。它显示错误cats不包含任何扩展方法的定义。@Sonesh:您必须为扩展方法包含一个
    using
    语句,以便对其进行编译。请参阅:(
    using System.Linq
    )我已经有了using语句,这就是上一个查询在页面上运行正常的原因。@Sonesh:Product\u SubCategory\u映射的类型是什么?如果它是一个
    IQueryable
    IEnumerable
    ,它应该可以工作。另外,您是否包含了对
    System.Core.dll
    的引用?检查我在之前的评论中链接的MSDN文档(现在是答案本身)。方法存在-它的使用方式有问题。Product_SubCategory_Mappings是SQL server中我正在查询的一个表。