首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将表达式转换回Func<Foo,bool>的lambda (序列化后)

将表达式转换回Func<Foo,bool>的lambda (序列化后)
EN

Stack Overflow用户
提问于 2015-08-09 03:42:14
回答 1查看 618关注 0票数 1

我正在尝试序列化和反序列化一个Func[Foo,bool]。我使用Serial.Linq进行序列化,因为它的部分工作正常,但我无法重新组装lambda谓词。大部分的原因可能是因为我对表达树的理解很差。

我尝试过以不同的顺序和Expression.Convert将类型参数传递给Func[Foo,bool],但我尝试的任何东西似乎都不起作用。

代码语言:javascript
代码运行次数:0
运行
复制
using System;
using Serialize.Linq.Serializers;
using System.Linq.Expressions;


public class Foo
{
        public string Bar {get; set;}
}

public class Program
{

    public static void Main()
    {
        // Step 1 Serialize it
        Expression<Func<Foo,bool>> bark = foo => foo.Bar.Contains("ruff");
        var expressionSerializer = new Serialize.Linq.Serializers.ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
        var serializedQuery = expressionSerializer.SerializeText(bark);

        // Step 2 Deserialize it
        var barkExpression = expressionSerializer.DeserializeText(serializedQuery);
        var barkExpressionReturnArgument = Expression.Parameter(typeof(bool));
        var barkExpressionArgument = Expression.Parameter(typeof(Foo));
        // var convertedExpression = Expression.Convert(barkExpression, typeof(Func<Foo,bool>));

        // How do I get bark back? I've tried a few variations here and can't quite get it. :(
        var barkFunction = Expression.Lambda<Func<Foo, bool>>(barkExpression, barkExpressionArgument).Compile();

        Console.WriteLine("Hello World");


    }

}

https://dotnetfiddle.net/MWNeol

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 04:08:46

我想通了。我想做的太多了,我不需要参数表达式。

仅在反序列化之后:

代码语言:javascript
代码运行次数:0
运行
复制
var barkFunction = ((Expression<Func<Foo, bool>>)barkExpression).Compile()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31900668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档