LINQ:两个单独的查询在一个不同的结果中
LINQ : two separate queries in a single distinct result
自从我使用 LINQ 以来已经有一段时间了,我一直在绞尽脑汁解决一些我希望更简单的事情...
我有一个带有上面模式(简化)的数据库,我想合并两个查询的结果,所以我会使用 LINQ (to Entities) 得到如下结果:
SUV
Gas
Diesel
Hybrid
Hydrogen
Biofuel
1
2
Semi
Gas
Diesel
1
3
4
因此,一个类别列表(由 CatTitles 标识)及其不同的类型(按指定顺序)及其不同的品牌 ID。
我无法使用导航属性,因为 link 表包含排序。
我有以下两个查询:
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),如果没有比较器,我不知道如何正确分组。
我想获得上述结果,而不必诉诸(非常)丑陋的代码比较迭代。至少防止检查双重 BrandID。
最有效的方法是什么?
感谢您的帮助!
我会先分组,然后在分组值中应用不同。
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
}
自从我使用 LINQ 以来已经有一段时间了,我一直在绞尽脑汁解决一些我希望更简单的事情...
我有一个带有上面模式(简化)的数据库,我想合并两个查询的结果,所以我会使用 LINQ (to Entities) 得到如下结果:
SUV
Gas
Diesel
Hybrid
Hydrogen
Biofuel
1
2
Semi
Gas
Diesel
1
3
4
因此,一个类别列表(由 CatTitles 标识)及其不同的类型(按指定顺序)及其不同的品牌 ID。
我无法使用导航属性,因为 link 表包含排序。
我有以下两个查询:
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),如果没有比较器,我不知道如何正确分组。
我想获得上述结果,而不必诉诸(非常)丑陋的代码比较迭代。至少防止检查双重 BrandID。
最有效的方法是什么? 感谢您的帮助!
我会先分组,然后在分组值中应用不同。
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
}