您可以按常數分組,以便獲得總和和平均值。然後使用SingleAsync
來獲得單一結果。
var data = await (from compaign in context.Compaigns
group compaign by 1 into grp
select new CampaignData()
{
TotalPost = grp.Sum(cc => cc.Posts),
AveragePost = grp.Average(c => c.Posts),
TotalImpression = grp.Sum(c => c.Impressions),
AverageImpressions = grp.Average(c => c.Impressions),
}).SingleAsync();
另一種選擇是真正讓你的異步調用數據庫中運行並行
var totalPostTask = context.Campaigns.SumAsync(c => c.Posts);
var averagePostTask = context.Campaigns.AverageAsync(c => c.Posts);
var totalImpressionTask = context.Campaigns.SumAsync(c => c.Impressions);
var averageImpressionsTask = context.Campaigns.AverageAsync(c => c.Impressions);
await Task.WhenAll(
totalPostTask,
averagePostTask,
totalImpressionTask,
averageImpressionsTask);
var data = new CampaignData()
{
TotalPost = totalPostTask.Result,
AveragePost = averagePostTask.Result,
TotalImpression = totalImpressionTask.Result,
AverageImpressions = averageImpressionsTask.Result,
};
如果我猜我想說的單一數據庫調用會表現得更好,但你隨時可以測試都選擇出去看哪個更好。
我想你不能。 – BradleyDotNET
爲什麼不呢?我可以用sql中的一行來完成。 – MIKE
因爲我想不出任何「自動」的方式來做一個枚舉(這基本上是你所要求的)。你當然可以手動做,但是...很難看。除非你的收藏非常大,否則折衷是不值得的。 – BradleyDotNET