我使用斯科特谷的動態LINQ和下面這個例子:動態Linq where子句與對象?
Expression<Func<Customer, bool>> e1 = DynamicExpression.ParseLambda<Customer, bool>("City = \"London\"");
Expression<Func<Customer, bool>> e2 = DynamicExpression.ParseLambda<Customer, bool>("Orders.Count >= 10");
IQueryable<Customer> query = db.Customers.Where("@0(it) and @1(it)", e1, e2);
但在我的情況,我想在E1 object.property的動態變量,E2 ......在where子句這樣:
Expression<Func<Customer, bool>> e1 = DynamicExpression.ParseLambda<Customer, bool>("City = **[object.property]**");
我會在運行時用對象的值屬性填寫
誰能告訴我如何做到這一點?
感謝
P/S:這可以表達的情況下進行:
var exp = "Person.Age = Persion1.Age";
var p = Expression.Parameter(typeof(Person), "Person");
var p1 = Expression.Parameter(typeof(Person1), "Person1");
var e = DynamicExpression.ParseLambda(new[] { p,p1 }, null, exp);
var result = e.Compile().DynamicInvoke(p,p1);
,但我不知道如何在做到這一點的where子句。
編輯,如@ pil0t: 這種情況下的答案是使用:Expression<Func<Customer, bool>> e1 = DynamicExpression.ParseLambda<Customer, bool>("Age > @0.Age",objPerson1);
我可以用類似Expression<Func<Customer, bool>> e1 = DynamicExpression.ParseLambda<Customer, bool>("Age > @Persion1.Age",objPerson1);
這一翻譯的@ 0。 ?
感謝@ pil0t,這是正是我所期望的。 但是,目前,我讓用戶輸入動態where子句,如:[Person.Age> Person1.Age]。那麼,我可以將部分[Age = @ 0.MyProp] ==> @ 0替換爲[@Person1.MyProp]之類的其他內容嗎? – user2954868
在字符串表達式中,您只能使用@ 0 @ 1 @ 2等作爲參數佔位符,因爲表達式編譯器無法訪問您的方法範圍。 – pil0t