我似乎需要一个LINQ(针对MS SQL Server的实体)查询,这有点过头了。
我的架构如下所示:
我的任务是显示特定ProductPricing
的所有ProductItem
行,按ProductPricing.EffectiveDate
排序,并按ProductPricing.CompaniesId
分组。
此外,我需要按ProductItemCompanies.SortOrder
订购论坛。
请注意,ProductPricing.CompaniesId
可以是null
,并且ProductPricing
CompaniesId
所有null
行需要被归为一个放置的单个组在所有其他团体之前。
我做了很多尝试,但我不清楚LINQ加入或分组以使其正确。我当前的代码看起来像这样,但它既不正确也不编译。
(请注意,DefaultProductItem
是ProductItems
我正在显示的ProductPricing
。)
var vendors = from pp in this.DefaultProductItem.ProductPricings
orderby pp.EffectiveDate
join pic in this.DefaultProductItem.ProductItemCompanies on pic.CompanyId equals pp.CompanyId &&
pic.ProductItemId equals this.DefaultProductItem.Id
group pp by pp into v
select v;
更新
在Tim.Tang的帮助下,我运行了以下查询:
var vendors = from pp in DefaultProductItem.ProductPricings
join pic in DefaultProductItem.ProductItemCompanies
on pp.CompanyId equals pic.CompanyId into left
from pic in left.DefaultIfEmpty()
orderby pp.EffectiveDate descending, pic == null ? -1 : pic.SortOrder
group pp by pp.CompanyId into v
select v;
这已经接近了,但它没有按ProductItemCompanies.SortOrder
对结果组进行排序。虽然上面的查询确实按此值排序,但这似乎不会影响组。
我知道我可以在事实之后轻松地对组进行排序,但我希望将原始查询的那部分用于提高效率。
答案 0 :(得分:1)
这是我的建议,希望它可以提供帮助:
var vendors = from pp in this.DefaultProductItem.ProductPricings
join pic in this.DefaultProductItem.ProductItemCompanies.Where(x=>x.ProductItemId == this.DefaultProductItem.Id)
on pp.CompanyId equals pic.CompanyIdinto left
from pic in left.DefalutIfEmpty()
orderby pp.EffectiveDate, pic==null?0:pic.SortOrder //sort order is INT?
group pp by pp.CompaniesId into v
select v;