[英]linq sql - aggregate count
我有一些返回正確數據的linq。
var numEmails = (from row in EmailBatchProposal
where row.EmailBatchId == emailBatchId
select row.EmailBatchProposalId).Count();
但是,如果我正確理解了linq,這將無法達到最佳效果。 它獲取所有數據,然后遍歷列表並對行進行計數。 我真正想要的是linq(在后台)使用:
Select count(*) from ...
我相信性能原因很明顯。
有人知道這樣做的正確方法嗎?
人們通常通過練習學習得最好。 我建議您獲得一個LinqPad副本(免費),在Linq查詢中輸入內容,並查看它生成的SQL。 然后,您可以修改Linq查詢,直到獲得所需的內容為止。
實際上,如果linq查詢與實現IQueryable並支持轉換為基礎SQL變體的集合一起使用,則是正確轉換示例中的Count函數的相當基本的功能。
您可以只使用.Count()
的參數。
int numEmails = EmailBatchProposal.Count(x => x.EmailBatchId == emailBatchId)
如下所述,這實際上並不能解析為任何其他SQL,但是我認為至少這是一種更簡潔的選擇。
檢查查詢中使用的SQL的日志。
using (var dbc = new siteDataContext())
{
dbc.Log = Console.Out;
var bd = (from b in dbc.birthdays
select b).Count();
Console.WriteLine("{0}", bd);
}
給出查詢:
SELECT COUNT(*) AS [value]
FROM [dbo].[birthdays] AS [t0]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.