C# 当编译时对象类型未知时,如何构建LINQ查询

C# 当编译时对象类型未知时,如何构建LINQ查询,c#,sql,linq,C#,Sql,Linq,我正在开发Web自定义控件,它能够将过滤器应用于LinqDataSource对象。它是泛型控件,因为它应该与特定类型的对象一起操作 控件通过以下字段知道它应该操作对象的哪个字段 /// <summary> /// Method to get compared column from object /// </summary> public Expression<Func<T, int>> GetColumnMetho

我正在开发Web自定义控件,它能够将过滤器应用于LinqDataSource对象。它是泛型控件,因为它应该与特定类型的对象一起操作

控件通过以下字段知道它应该操作对象的哪个字段

    /// <summary>
    /// Method to get compared column from object
    /// </summary>
    public Expression<Func<T, int>> GetColumnMethod;
//
///方法从对象中获取比较列
/// 
公开表达法;
(我将其转换为从对象类型获取适当字段的it方法)

我们用这样的代码执行过滤


。。。如果(selectedValue==”LINQ to SQL提供程序负责将表达式树转换为有效的T-SQL语句。由于C#和T-SQL之间没有1对1的关系,很可能表达式树越复杂,LINQ to SQL能够转换的可能性就越小


当您使用lambda表达式时,您必须决定是要编译它还是将其用作表达式树。如果您要将lambda用作表达式,则您有责任确保表达式包含提供程序支持的函数和语法。

它无法工作。基本上,您的LINQ查询是有效的C代码,因此编译很好,但在运行时对LINQ to SQL提供程序范围之外的任何对象都会失败

请在此处阅读更多信息:


如果只是选择要在查询中使用的特定字段的问题,您应该能够使用表达式Compile“perversion”来完成此操作“。但这可能需要大量的工作。通过编译您现在拥有的并对输出使用Reflector来查看C#编译器生成的代码是什么样子,您可能可以抢先一步


您可以将查询分为两部分吗?一部分转换为SQL并在服务器上运行,另一部分使用GetColumnMethod并在内存中针对第一部分输出的数据运行?

对于任意委托,没有SQL。如果
方法(c)
可以表示为lambda,您可以使用
表达式调用lambda作为子表达式。invoke
,但您需要自己构建表达式树