我试图比较一个对象的属性是否具有int的值。 请问如何实现呢?
int id = 123;
// Func<MyClass, bool> f = x => x.A.B.Id == id;
var a = System.Linq.Expressions.MemberExpression.Property(param, "A");
var b = System.Linq.Expressions.MemberExpression.Property(a, "B");
body = System.Linq.Expressions.Expression.Equal(
System.Linq.Expressions.MemberExpression.Property(b, "Id"),
System.Linq.Expressions.MemberExpression.Constant(id, typeof(int))
);
这会引发无效操作异常。
答案 0 :(得分:1)
目前尚不清楚你做错了什么,因为你没有展示足够的代码或足够的错误。一般的方法很好。这是一个简短而完整的例子:
using System;
using System.Linq.Expressions;
public class House
{
public Person Owner { get; set; }
}
public class Person
{
public string Name { get; set; }
}
class Test
{
static void Main()
{
int targetLength = 3;
var param = Expression.Parameter(typeof(House), "p");
var a = Expression.Property(param, "Owner");
var b = Expression.Property(a, "Name");
var length = Expression.Property(b, "Length");
var target = Expression.Constant(targetLength, typeof(int));
var body = Expression.Equal(length, target);
var lambda = Expression.Lambda<Func<House, bool>>(body, param);
var compiled = lambda.Compile();
var house = new House { Owner = new Person { Name = "Jon" } };
Console.WriteLine(compiled(house));
house.Owner.Name = "Holly";
Console.WriteLine(compiled(house));
}
}
我建议您查看我的代码和代码之间的区别,以找出问题所在。
答案 1 :(得分:0)
我发现了。属性ID不是Int32,而是Int16。我的错。对于其他人。在离开之前检查对象属性类型3次:)