LINQ:单个不同结果中的两个单独查询

时间:2015-06-15 13:18:56

标签: c# linq linq-to-entities

自从我使用LINQ以来已经有一段时间了,我一直在挣扎着解决我希望更简单的问题......

enter image description here

我上面有一个带有架构(简化)的数据库,想要结合两个查询的结果,所以我会得到类似于使用LINQ(实体)的结果:

SUV     
  Gas   
  Diesel    
  Hybrid    
  Hydrogen  
  Biofuel 
  1 
  2

Semi
  Gas
  Diesel
  1
  3
  4

所以,一个类别列表(由CatTitles标识)及其指定顺序的不同类型,以及它们不同的BrandID。

我无法使用导航属性,因为链接表包含排序。

我有以下两个问题:

var typesPerCat = (from cats in CarCategories
                join ctts in CategoryTypes on cats.CatID equals ctts.CatID
                join tps in Types on ctts.TypeID equals tps.TypeID
                select new
                {
                  cats.CatTitle,
                  tps.TypeName
                }).GroupBy(k=>k.CatTitle)

var brandIDsPerCat = (from cats in CarCategories
                join ctts in CategoryTypes on cats.CatID equals ctts.CatID
                join tps in Types on ctts.TypeID equals tps.TypeID
                join tpbs in TypeBrands on tps.TypeID equals tpbs.TypeID
                select new
                {
                  cats.CatTitle,
                  tpbs.BrandID
                }).GroupBy(k=> new {k.CatTitle, k.BrandID}) 

此最后一个查询会导致双重输入:例如1,2,2和1,3,3,3,4,4(每个类型和每个类别的类型有多个BrandID)我无法弄清楚如何在没有比较器的情况下正确分组。

我想得到上述结果,而不必在代码中进行比较时采用(非常)丑陋的迭代。至少要阻止检查双BrandIDs。

这样做最有效的方法是什么? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我会先分组,然后在分组值中应用不同的颜色。

var brandIDsPerCat = (from cats in CarCategories
                join ctts in CategoryTypes on cats.CatID equals ctts.CatID
                join tps in Types on ctts.TypeID equals tps.TypeID
                join tpbs in TypeBrands on tps.TypeID equals tpbs.TypeID
                group new {cats, tpbs} by cats.CatTitle into g
                select new
                {
                  catTitle = g.Key
                  brandId = g.Select(x => x.tpbs.BrandId)
                             .Distinct()
                             .OrderBy(x => x)//if you need ordering in groups
                }