栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

LINQ:动态选择

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LINQ:动态选择

您可以通过动态创建传递给的lambda来做到这一点

Select:

Func<Data,Data> CreateNewStatement( string fields ){    // input parameter "o"    var xParameter = expression.Parameter( typeof( Data ), "o" );    // new statement "new Data()"    var xNew = expression.New( typeof( Data ) );    // create initializers    var bindings = fields.Split( ',' ).Select( o => o.Trim() )        .Select( o => { // property "Field1" var mi = typeof( Data ).GetProperty( o ); // original value "o.Field1" var xOriginal = expression.Property( xParameter, mi ); // set value "Field1 = o.Field1" return expression.Bind( mi, xOriginal );        }    );    // initialization "new Data { Field1 = o.Field1, Field2 = o.Field2 }"    var xInit = expression.MemberInit( xNew, bindings );    // expression "o => new Data { Field1 = o.Field1, Field2 = o.Field2 }"    var lambda = expression.Lambda<Func<Data,Data>>( xInit, xParameter );    // compile to Func<Data, Data>    return lambda.Compile();}

然后,您可以像这样使用它:

var result = list.Select( CreateNewStatement( "Field1, Field2" ) );


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468762.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号