从 EF 模型中的所有表中获取 10 行
Get 10 rows from all tables in EF model
我从 here 找到了这个样本:
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();
有没有办法在不使用 Sql 字符串的情况下获得 10 行?
例如与此类似的东西(它得到 table 关联,我在 10 (N) 行 table 数据而不是 table 关联之后:
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();
EntityFramework returns IEnumerables 当你从数据库中获取数据时。这意味着除非您通过它进行枚举(例如获取计数、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();
您将从 table 中获取整行(注意 ToList()),
为此,您需要在类型上调用 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(如标题所示)。
我从 here 找到了这个样本:
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();
有没有办法在不使用 Sql 字符串的情况下获得 10 行?
例如与此类似的东西(它得到 table 关联,我在 10 (N) 行 table 数据而不是 table 关联之后:
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();
EntityFramework returns IEnumerables 当你从数据库中获取数据时。这意味着除非您通过它进行枚举(例如获取计数、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();
您将从 table 中获取整行(注意 ToList()),
为此,您需要在类型上调用 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(如标题所示)。