【问题标题】:Howto build Subsonic 3 query with dynamic table and column names using reflection如何使用反射构建具有动态表和列名的 Subsonic 3 查询
【发布时间】:2011-07-02 06:39:26
【问题描述】:

我想使用代码构造一个动态的 Subsonic 3 查询来获取一个类型的集合。 SQL 会这样:

select * from @tableName where @columnName1 = @columnValue1

亚音速查询如下所示:

List<object> = new DB.Select.From<getTypeClass(tableName)>.Where(columnName1).IsEqualTo(columnValue1).ExecuteTypeList<getTypeClass(tableName)>();

我想使用反射来完成此操作,但我认为不可能在 子句之间放置一个非静态项。

【问题讨论】:

    标签: c# reflection dynamic subsonic3


    【解决方案1】:

    解决方案是为 Select 类上的方法生成泛型方法,并能够启动相同类型的泛型列表。

    Type toType;
    var GenericListOfType = typeof(List<>).MakeGenericType(new []{toType});
    var ListOfType = Activator.CreateInstance(GenericListOfType);
    
    MethodInfo GenericExecuteTypedList = typeof(Select).GetMethod("ExecuteTypedList").MakeGenericMethod(toType);
    

    然后像这样调用这个方法:

    ListOfType = GenericExecuteTypedList.Invoke(new Select().From(toType.Name), null);
    

    From 方法有一个接受字符串值的重载。传递类型名称效果很好,在我的情况下,表和类名是相同的。

    在调用泛型方法之前添加一些 where 语句很容易。

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 2019-11-24
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多