嘗試將以下SQL查詢轉換爲LINQ,但我堅持由ClientCompany進行分組。LINQ中的分組和MIN()
SELECT TOP 300 ClientCompany,
CASE WHEN MIN(FeatureID) = 12 THEN 1 ELSE 0 END as Sort
FROM Ad
LEFT JOIN AdFeature
ON Ad.ID = AdFeature.AdID
WHERE (AdFeature.FeatureID = 13 OR AdFeature.FeatureID = 12)
AND SiteID = 2
GROUP BY ClientCompany
ORDER BY Sort DESC
我嘗試將其轉換爲LINQ:
(from a in Ads
join af in AdFeatures
on new {
join1 = a.ID,
join3 = 2
} equals new {
join1 = af.AdID,
join3 = af.SiteID
}
let sort = (
af.FeatureID == 12 ? 1 : 0
)
orderby sort descending
where af.FeatureID == 13 || af.FeatureID == 12
select new { a.ClientCompany, sort }).Take(300)
我將如何使用MIN(FeatureID)
和GROUP BY ClientCompany
在LINQ,所以我只有每ClientCompany得到單列回來?
編輯
這個工作!根據Daniel Hilgarth的回答。這個解決方案有什麼可怕的錯誤嗎?
Ads.Join(AdFeatures, x => x.ID, x => x.AdID,
(a, af) => new { Ad = a, AdFeature = af })
.Where(x => x.AdFeature.FeatureID == 12 || x.AdFeature.FeatureID == 13)
.Where(x => x.AdFeature.SiteID == 2)
.GroupBy(x => x.Ad.ClientCompany)
.Select(g => new { ClientCompany = g.Key, Sort = g.Min(x => x.AdFeature.FeatureID) == 12 ? 1 : 0 })
.OrderByDescending(x => x.Sort)
.Take(300)
所有答案都包含我不習慣的lambda表達式。你能解釋一下這裏發生了什麼嗎? 當我用LINQPad 4試用時,它不工作。 _'LINQPad.User.Ad'不包含'FeatureID'的定義,也沒有接受'LINQPad'類型的第一個參數的擴展方法'FeatureID' .User.Ad'可以找到(按F4添加使用指令或程序集引用)_ –
使用了一些修改(在原始文章中更新)。謝謝! –