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

Linq:使用表达式树语法按多列分组分享

时间:2023-04-10 18:58:06 C#

C#学习教程:Linq:使用表达式树语法对多列进行分组>DynamicGroupBy(stringpropertyName){varparameterExp=Expression.Parameter(typeof(ProfileResultView),"x");varmemberExp=Expression.PropertyOrField(parameterExp,propertyName);返回Expression.Lambda(memberExp,parameterExp);所以这将被翻译成GroupBy(x=>new{x.Column1,x.Column2})如何在表达式树语法中编写匿名类型?如果分组键的类型对您来说无关紧要,您可以动态创建类型并根据这些类型调用分组:varprops=properties.Select(x=>entityType.GetProperty(x)).ToList();varsource=Expression.Parameter(entityType,"x");//创建x=>newmyType{prop1=x.prop1,...}varnewType=CreateNewType(props);varbinding=props.Select(p=>Expression.Bind(newType.GetField(p.Name),Expression.Property(source,p.Name))).ToList();varbody=Expression.MemberInit(Expression.New(newType),绑定);varselector=Expression.Lambda>(body,source);返回选择器;}publicstaticTypeCreateNewType(Listprops){AssemblyNameasmName=newAssemblyName("MyAsm");AssemblyBuilderdynamicAssembly=AssemblyBuilder.DefineDynamicAssembly(asmName,AssemblyBuilderAccess.Run);ModuleBuilderdynamicModule=dynamicAssembly.DefineDynamicModule("MyAsm");TypeBuilderdynamicAnonymousType=dynamicModule.DefineType("MyType",TypeAttributes.Public);foreach(varpinprops){dynamicAnonymousType.DefineField(,p.PropertyType,FieldAttributes.Public);}返回dynamicAnonymousType.CreateType();}请注意,组键类型是object如果对你有用,需要详细了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: