2013-04-02 97 views
1

我有以下型號LINQ的選擇

public class SummaryModel 
{ 
    public int CompanyCount { get; set; } 
    public int GroupCount { get; set; } 
    public int ProjectCount { get; set; } 
    public int ResourcesCount { get; set; } 
    public int PeopleCount { get; set; } 
} 

我想使用LINQ查詢我的數據庫,並從多個表中返回的記錄數和填充此模型對象。

這是我正在做它:

 using (var ctx = new WeWorkModel.weWorkEntities()) 
     { 
      var summary = new SummaryModel() 
       { 
        CompanyCount = ctx.Companies.Count(), 
        PeopleCount = ctx.People.Count(), 
        GroupCount = ctx.Groups.Count(), 
        ProjectCount = ctx.Projects.Count(), 
        ResourcesCount = ctx.Resources.Count() 
       }; 

     } 

這是做到這一點的最有效方法是什麼?

+0

幾乎沒有其他選擇。無論如何,計數將是最昂貴的部分。 –

回答

0

您是否需要將此模型存儲在數據庫中或在實例化後更改其值?如果不是,爲什麼不把這個代碼塊放在一個無參數的構造函數中,並且只讀字段以避免使用這個模型與預期不同。如果稍後發現需要對字段初始化進行更好的控制,則只需添加另一個構造函數來處理該特定情況。就主要問題而言,我沒有看到處理它的方式效率不高。儘管使用代碼幾乎總是提供更加簡潔的方式或者更有效的方式來處理任何場景。

1

是的,這是最有效的方式 - 相當於編寫sql查詢,因爲它不會獲取對象,而只是在服務器上進行計數。因此,類似這樣的事情(使用Profiler我跟蹤查詢)

SELECT 
[GroupBy1].[A1] AS [C1] 
FROM (SELECT 
    COUNT(1) AS [A1] 
    FROM [dbo].[Company] AS [Extent1] 
) AS [GroupBy1]