自从我使用LINQ以来已经有一段时间了,我一直在挣扎着解决我希望更简单的问题......
我上面有一个带有架构(简化)的数据库,想要结合两个查询的结果,所以我会得到类似于使用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。
这样做最有效的方法是什么? 谢谢你的帮助!
答案 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
}