簡體   English   中英

如何使用Linq進行多重屬性Lambda表達式

[英]How can I make a Multiple property lambda expression with Linq

我用

ParameterExpression parameter = Expression.Parameter(typeof(T), "p");

var myexp=Expression.Lambda<Func<T, TKey>>(Expression.Property(parameter, "myid"), parameter);

創建一個lambda表達式myexp這樣的

p=>myid

現在我想創建一個多屬性

p=> new {myid,myid2}

這樣做的棘手的部分是訪問匿名類型的類型,這樣就可以調用new吧。 我通常使用LINQPad創建示例lambda並將其轉儲以查看格式:

Expression<Func<Test,object>> lambdax = p => new { p.myid, p.myid2 };
lambdax.Dump();

假設p的類型為Test

class Test {
    public int myid;
    public int myid2;
}

然后,您可以創建Expression來重新創建lambdax值:

var exampleTest = new Test();
var example = new { exampleTest.myid, exampleTest.myid2 };
var exampleType = example.GetType();

var rci = exampleType.GetConstructors()[0];
var parm = Expression.Parameter(typeof(Test), "p");
var args = new[] { Expression.PropertyOrField(parm, "myid"), Expression.PropertyOrField(parm, "myid2") };

var body = Expression.New(rci, args, exampleType.GetMembers().Where(m => m.MemberType == MemberTypes.Property));
var lambda = Expression.Lambda(body, parm);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM