我试图编写一个函数,通过传入一个Type来动态选择实体表数据。优选的一个将所有数据保存在SQL中直到我调用执行。所以我可以在执行之前对它进行链式加法查询。
现在我正尝试使用“创建查询”和“扩展我的实体对象”
来执行此操作public ObjectQuery<T> GetEntityData<T>()
where T : class
{
ObjectContext objectContext = ((IObjectContextAdapter)this).ObjectContext;
string TableName = objectContext.GetCurrentTableName<T>();
return objectContext.CreateQuery<T>("select * from " + TableName);
}
public static class ContextExtensions
{
public static string GetCurrentTableName<T>(this ObjectContext context) where T : class
{
string sql = context.CreateObjectSet<T>().ToTraceString();
Regex regex = new Regex("FROM (?<table>.*) AS");
Match match = regex.Match(sql);
string table = match.Groups["table"].Value;
return table;
}
}
虽然我执行此代码,但我仍然遇到错误&#34;查询语法无效。近期&#39; *&#39;,第3行,第9列。&#34;那可能是因为Create查询需要EntitySql语法而不是T-SQL,是否有人知道我需要做什么才能使它返回正确的数据集?
答案 0 :(得分:0)
事实证明,来自contextExtensions
的答案已经存在public IQueryable<T> GetEntityData<T>()
where T : class
{
ObjectContext objectContext = ((IObjectContextAdapter)this).ObjectContext;
return (objectContext.CreateObjectSet<T>() as IQueryable<T>).Where("ID > 19000");
}