【发布时间】:2011-12-09 16:04:00
【问题描述】:
我编写了一些类来将System.Linq.Expressions 序列化为 DataContracts,以便能够通过 WCF 发送。它工作得很好很好。问题是当我想序列化一个包含变量的表达式时。这是一个解释问题的例子:
public class Foo
{
public string Name { get; set; }
}
// CASE 1
Expression<Func<Foo, bool>> lambda = foo => foo.Name == "Test";
Console.WriteLine(lambda);
// OUTPUT: foo => (foo.Name == "Test")
// CASE 2
var variable = "Test";
lambda = foo => foo.Name == variable;
this.AssertExpression(lambda, "Class Lambda expression with variable.");
// OUTPUT: foo => (foo.Name == value(MyTest+<>c__DisplayClass0).variable)
序列化CASE 2表达式没有问题,但是序列化的数据没有用,因为在服务端,没有什么可以解决value(MyTest+<>c__DisplayClass0).variable
所以我需要在序列化该表达式之前解析变量,以便 CASE 2 表达式序列化为与 CASE1 相同的结果
【问题讨论】:
-
出于完全不同的原因,我有一个类似的问题表达。长话短说,在遍历树检查成员访问时,如果该成员不是表达式的 TSource,则向下钻取到成员中的值并将其放在常量中。现在没有时间对此进行扩展,但希望您能走上正轨。如果您需要我扩展,请告诉我,我会做出正确的回答... GL!编辑:我对此提出了一个问题,因此如果您对它们进行扫描,您可能会找到参考代码-出于某种原因,我相信它们的排名为-1
标签: c# linq lambda linq-expressions