C# 动态LINQ2SQL到未映射表

C# 动态LINQ2SQL到未映射表,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我正在使用一个允许客户创建和导入自定义表的应用程序。我需要允许这些客户针对导入的自定义表构建动态查询,我希望能够使用LINQ来实现这一点 我熟悉如何创建动态LINQ查询,但是我知道的所有方法都需要DataContext对象上的现有映射对象。由于用户能够在运行时(通过动态字符串构建SQL)创建自定义表,所以在任何DataContext中都没有映射对象 是否有一种方法可以在运行时动态创建DataContext和映射对象,以便与动态Linq查询一起使用 是否有其他方法可以在不使用字符串构建的sql的情

我正在使用一个允许客户创建和导入自定义表的应用程序。我需要允许这些客户针对导入的自定义表构建动态查询,我希望能够使用LINQ来实现这一点

我熟悉如何创建动态LINQ查询,但是我知道的所有方法都需要DataContext对象上的现有映射对象。由于用户能够在运行时(通过动态字符串构建SQL)创建自定义表,所以在任何DataContext中都没有映射对象

是否有一种方法可以在运行时动态创建DataContext和映射对象,以便与动态Linq查询一起使用


是否有其他方法可以在不使用字符串构建的sql的情况下执行此操作?

有一些T4模板可用于创建Linq to sql数据类。也许你能适应这些

我可以想到两种方法来生成程序集,而无需使用Microsoft C#编译器或Visual Studio。第一种方法是使用
System.Reflection.Emit
生成自定义程序集。这可能比听起来容易;查看以下Reflector附加模块:

Reflector的ReflectionMitLanguage加载项

外接程序所做的是获取现有的IL程序集并创建包含
System.Reflection.Emit
调用的C#代码,该调用将生成与C#编译器相同的IL。因此,基本上您要做的是创建一个包含原型
DataContext
的程序集,并在其方法上运行它。然后您将拥有一个类(或其中更好的部分),该类将直接生成IL程序集。所有这些代码都是开源的


您可以做的另一件事是尝试使用(可以像服务一样调用,不像Microsoft C#编译器)生成IL程序集。C#编译器也是开源的。

这是一个有趣的想法。我相信这仍然需要VisualStudio根据T4模板进行解析和生成。我也可能使用另一个代码生成器(如CodeSmith)来获得类似的结果,但据我所知,两者都需要编译才能将类连接到DataContext中。因此,到目前为止,答案是必须进行某种类型的动态编译,以便为Linq构建类和数据上下文。有几种用于动态编译的资源。我将朝这个方向努力。这是使用反射发射调用的组合来动态构建类型,并使用亚音速IQueryable引擎完成的。