使用实体框架动态选择表集

时间:2014-10-13 15:54:29

标签: sql entity-framework dynamic

我试图编写一个函数,通过传入一个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,是否有人知道我需要做什么才能使它返回正确的数据集?

1 个答案:

答案 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");
}