代码之家  ›  专栏  ›  技术社区  ›  Budda

Linq错误:无法分组

  •  0
  • Budda  · 技术社区  · 14 年前

    以下是Linq查询:

    Common.ProductType.ProductTypeEnum[] aCustomerProduct = 
        (from customer in repositoryCustomer.GetAll().Where(cp => cp.Email == strEmail)
        join cp in repositoryCustomerProduct.GetAll() on customer.CustomerId equals cp.CustomerId
        select cp.ProdId
        ).ToArray<ProductType.ProductTypeEnum>();
    

    这里一切正常:返回4个项目的数组。

    但这里我只需要接收一个唯一的项目,所以我在这里添加了分组:

    Common.ProductType.ProductTypeEnum[] aCustomerProduct = 
        (from customer in repositoryCustomer.GetAll().Where(cp => cp.Email == strEmail)
        join cp in repositoryCustomerProduct.GetAll() on customer.CustomerId equals cp.CustomerId
        group cp by cp.ProdId into products0
        select products0.Key
        ).ToArray<ProductType.ProductTypeEnum>();
    

    我得到的不是数组而是一条错误消息:

    参数“value”的类型错误。应为“Common.ProductType+ProductTypeEnum”。实际的“System.Int32”。

    第二个问题是什么?

    请告知。谢谢!

    P.S.第二个查询根本不进入MSSQL服务器(Profiler对此没有显示任何内容)。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Tim Jarvis    14 年前

    为什么你只是为了独特而分组?为什么不直接使用distinct呢?

    (from **blah
    join **blaa
    select **blah).Distinct().ToArray();
    

    这将产生更加高效的SQL。

        2
  •  1
  •   Enigmativity    14 年前

    您已按分组 ProdId 作为键,然后选择键。所以如果 产品ID 是整数,则查询返回 IEnumerable<int> . 然后您将无法隐式更改为类型的数组 ProductType.ProductTypeEnum .