如何在Linq表达式中定义匿名类型lambda参数

epggiuax  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(143)

我在stackoverflow的帖子中发现了他们是如何创建匿名对象的,但是我想创建一个Lambda表达式,它只选择对象中的一个字段,以便能够按ID分组
当前从这里开始的连接Linq: Group by multiple columns using Expression-tree syntax
创建了一个新类型,但我希望它能够在GroupBy Linq方法上工作...

public static Type CreateNewType(List<PropertyInfo> props)
{
    AssemblyName asmName =  typeof(Program).Assembly.GetName();
    AssemblyBuilder dynamicAssembly = AssemblyBuilder
        .DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run);
    ModuleBuilder dynamicModule = dynamicAssembly.DefineDynamicModule("MyAsm");
    TypeBuilder dynamicAnonymousType = dynamicModule
        .DefineType("MyType", TypeAttributes.Public);

    foreach (var p in props)
    {
        dynamicAnonymousType.DefineField(p.Name, p.PropertyType, FieldAttributes.Public);
    }
    return dynamicAnonymousType.CreateType();
}

字符串
使用此类型使用单个字段(我只需要字段而不是类...按不存在的实体MyType分组...它应按我的类中的任一实体/字段分组

lsmepo6l

lsmepo6l1#

在这里,我发现我可以使用以下代码从lambda中选择字段

public Expression<Func<TSource,object>> DynamicPropertySelect<TSource>(ParameterExpression parameterExpression = null, params string[] properties)
        {
            var entityType = typeof(TSource);
            var props = properties.Select(x => entityType.GetProperty(x)).ToList();
            return Expression.Lambda<Func<TSource, object>>(Expression.Property(parameterExpression, props.First().Name), parameterExpression);
        }

相关问题