当前位置: 首页 > 编程语言 > C#

如何使用非genericsLambda生成子查询分享

时间:2023-04-11 11:37:15 C#

C#学习教程:如何用non-genericLambda生成子查询.Where(r=>r.Country=='Canada')我正在尝试创建一个完整的lambda表达式,而无需任何调用或直接调用。类似于:voidAddFilter(ITabletable,MetaDataMemberrelation){vartableParam=Expression.Parameter(table.ElementType,"e");varprop=Expression.Property(tableParam,relation.Name);varfunc=typeof(Func).MakeGenericType(table.ElementType,relation.type)varexp=Expression.Lambda(func,prop,tableParam);这将生成e.Regions......但我无法从那里获得Where部分......我知道我在游戏中我的回答已经很晚了,很可能这不是你正在寻找的确切解决方案for(仍然经常使用),但也许它会帮助您和其他人构建他们的表达式:/*示例:Session.Query.Where(m=>m.Regions.Where(f=>f.Name.Equals("test")))*/varinnerItem=Expression.Parameter(typeof(MyInnerClass),"f");varinnerProperty=Expression.Property(innerItem,"名称");varinnerMethod=typeof(string).GetMethod("Equals",new[]{typeof(string)});varinnerSearchExpression=Expression.Constant(searchString,typeof(string));varinnerMethodExpression=Expression.Call(innerProperty,innerMethod,new[]{innerSearchExpression});varinnerLambda=Expression.Lambda>(内部方法表达式,内部项目);varouterItem=Expression.Parameter(typeof(MyOuterClass),"m");varouterProperty=Expression.Property(outerItem,info.Name);/*调用Enumerable中定义的方法扩展*/varouterMethodExpression=Expression.Call(typeof(Enumerable),"Where",new[]{typeof(MyInnerClass)},outerProperty,innerLambda);varouterLambda=Expression.Lambda>(outerMethodExpression,outerItem);query=query.Where(outerLambda);基于此处发布的答案:DynamicallycreateLinqexpressionscontainingsubqueries试试这个,它并不漂亮,但它为您提供了整个结构的有效表达式。您可以将内部lambda定义为一个表达式,但是在将它传递给Where()之前您仍然需要对其进行编译,因此对于这个答案来说它似乎是多余的。以上就是《C#学习教程:如何使用非泛型Lambda生成子查询》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—Expression>getRegions=p=>p.Regions。Where(r=>r.Country=="加拿大");本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢