2015-02-07 107 views
0

我想要進行基本統計,以獲得表或實體的數據計數,並且我在詢問是否可以在實體框架中的一個查詢中執行此操作?我可以通過在存儲過程中使用多於select語句來在SQL查詢中執行此操作。在實體框架中選擇的不是非相關實體

回答

0

這裏是我的方法,如何做到這一點,最後還是應該構造SQL Select語句,但仍然如此。

首先,你應該增加namespases:

using System.Data.Entity.Core.Metadata.Edm; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.Core.Objects; 

然後你就可以使用此代碼來獲取與行計數的所有表。

YourDBEntities ent = new YourDBEntities(); 
ObjectContext context = ((IObjectContextAdapter)ent).ObjectContext; 
MetadataWorkspace metadataWorkspace = context.MetadataWorkspace; 
EntityContainer container = metadataWorkspace 
    .GetItems<EntityContainer>(DataSpace.CSpace).First(); 
ReadOnlyMetadataCollection<EntitySetBase> entitySetBase = container.BaseEntitySets; 

//Get Table Names 
var tableNames = entitySetBase 
    .Where(x => x.BuiltInTypeKind == BuiltInTypeKind.EntitySet) //Get Tables Only 
    .Select(x => x.Name); 

//Get data 
foreach (var tableName in tableNames) 
{ 
    //Counstruct query for each table 
    var selectSQL = String.Format(@"SELECT '{1}', COUNT(1) AS Count 
            FROM {0}", tableName, tableName); 
    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(selectSQL); 
    ObjectResult<DbDataRecord> results = query.Execute(MergeOption.AppendOnly); 
    DbDataRecord res = results.First(); 
    //Write to console 
    Console.WriteLine("Table '{0}' contains {1} of rows", res[0], res[1]); 
}