Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中创建表达式树#_C#_Linq_Expression Trees - Fatal编程技术网

C# 在c中创建表达式树#

C# 在c中创建表达式树#,c#,linq,expression-trees,C#,Linq,Expression Trees,我正在尝试使用LINQ中的表达式树创建一个动态查询,以表示以下查询 WageConstIns.Where(WageConstIn => WageConstIn.Serialno.ToString().StartsWith("2800")); 我尝试过这样创建它: MemberExpression le1 = LinqExpression.Property(paramExp, "Serialno"); MethodCallExpression le2 = LinqExpression.Ca

我正在尝试使用LINQ中的表达式树创建一个动态查询,以表示以下查询

WageConstIns.Where(WageConstIn => WageConstIn.Serialno.ToString().StartsWith("2800"));
我尝试过这样创建它:

MemberExpression le1 = LinqExpression.Property(paramExp, "Serialno");
MethodCallExpression le2 = LinqExpression.Call(le1, typeof(string).GetMethod("ToString",  System.Type.EmptyTypes));
ConstantExpression le3 = LinqExpression.Constant("2800");
MethodCallExpression le4 = LinqExpression.Call(le2, typeof(string).GetMethod("StartsWith"));

我在运行时遇到一个错误。如何最好地使用表达式树构建上述查询?

最简单的方法是将其声明为
表达式


大多数进入表达式树领域的人(我曾经与他们交谈过)通常对该功能感到满意。(这可能被滥用成许多不同的方式。)这段纯粹令人惊叹的代码片段是Visual Studio示例代码的一部分,可能已经隐藏在您的硬盘上了。

为什么不告诉我们您遇到了什么错误?请帮助我们使用表达式树:DummyCol.Where(DummyItem=>Convert.ToString(DummyItem.Serialno).StartsWith(“2008”))
public static class Program {
    public static void Main() {
        Expression<Func<DummyClass, Boolean>> predicate = WageConstIn => WageConstIn.Serialno.ToString().StartsWith("2800");
    }
}
public static class Program {
    public static void Main() {
        var param = Expression.Parameter(typeof(DummyClass), "WageConstIn");
        var constValue = Expression.Constant("2800");

        // WageConstIn => WageConstIn.Serialno.ToString().StartsWith(...)
        var first = Expression.Lambda(
            parameters: param,
            body: Expression.Call(
                instance: Expression.Call(
                    instance: Expression.Property(param, "Serialno"),
                    methodName: "ToString",
                    typeArguments: null,
                    arguments: null
                ),
                methodName: "StartsWith",
                typeArguments: null,
                arguments: new[] { constValue }
            )
        );

        // WageConstIn => Convert.ToString(WageConstIn.Serialno).StartsWith(...)
        var second = Expression.Lambda(
            parameters: param,
            body: Expression.Call(
                instance: Expression.Call(
                    type: typeof(Convert),
                    methodName: "ToString",
                    typeArguments: null,
                    arguments: new[] { Expression.Property(param, "Serialno") }
                ),
                methodName: "StartsWith",
                typeArguments: null,
                arguments: new[] { constValue }
            )
        );
    }
}