2016-04-20 53 views
1

所有表10行,我發現這個樣本從here獲取從EF模型

NWDataContext context = new NWDataContext(); 

var model = context.Mapping; 

//get all tables 
foreach (var mt in model.GetTables()) 
{ 
    Console.WriteLine("Getting data " + mt.TableName); 

    //generate a sql statment for each table - just grab the first 20 
    string sql = String.Format("Select Top 20 * from {0} ", mt.TableName); 
    var data = context.ExecuteQuery(mt.RowType.Type, sql); 

    //data is here now. Lets print it on the console 
    foreach (var item in data) 
    { 
     Console.WriteLine(item.ToString()); 
    } 
} 
Console.ReadLine(); 

有沒有辦法讓10行,而不使用SQL字符串?

對於類似於此示例東西(它得到表關聯,我以後表數據,而不是表協會10(N)行):

var tableData = from t in this.Mapping.GetTables() 
       select new 
       { 
        t.TableName, 
        Associations = 
         from a in t.RowType.Associations 
         select new 
        { 
         a.ThisMember.Name, 
         TypeName = a.ThisMember.Type.Name 
        } 
       }; 
tableData.Dump(); 

回答

1

要做到這一點,你需要調用類型context.GetTable

from metaTable in context.Mapping.GetTables() 
let table = (IQueryable<object>) context.GetTable (metaTable.RowType.Type) 
select table.Take(10) 

請記住,您的示例與LINQ to SQL相關,而不是EF(如標題所示)。

-1

的EntityFramework返回IEnumerables當你從數據庫中獲取數據。這意味着除非通過枚舉(例如get count,ToList()等),否則數據將不會從數據庫中獲取。

所以這裏有一個例子,

var database = new SomeDatabase(connectionString); 
var tableRows = database.Context.SomeTableName; 
var result = new List<SomeDataType>(); 
var count = 0; 
foreach (var tableRow in tableRows) 
{ 

    result.Add(tableRow); 
    count++; 
    if (count == 10) break; 
} 

或者

var result = database.ContextSomeTableName.Take(10).ToList(); 

在這個例子中,只有10個記錄將從數據庫中獲取。 但是,如果你這樣做,

var tableRows = database.Context.SomeTableName.ToList(); 

你會從該表中提取完整行(注ToList()),

+0

我認爲這是錯過了一點,因爲它需要你在編譯時知道表名。 (而且這似乎是一種複雜的寫作方式'var result = database.Context.SomeTableName.Take(10).ToList()') – sgmoore

+0

同樣也適用。謝謝, –