簡體   English   中英

linq sql-總數

[英]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,但是我認為至少這是一種更簡潔的選擇。

實際上,LINQ-to-SQL非常聰明,足以知道它應該進行計數……例如,如果我有以下查詢:

var v = (from u in TblUsers
        select u).Count();

運行此命令時實際執行的SQL是:

SELECT COUNT(*) AS [value]
FROM [tblUsers] AS [t0]

太神奇了吧? 另一位發布者對獲得LinqPad提出了非常好的建議-這是一個了不起的工具。 它將向您顯示執行的確切SQL。 您也可以始終使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM