C# 用于选择特定列的动态linq lambda表达式

C# 用于选择特定列的动态linq lambda表达式,c#,linq-expressions,C#,Linq Expressions,试图从T类型的给定列表中选择少数列 获得以下代码: var myList = new List<Class>(){ //data}; // new statement "new Data()" var xNew = Expression.New(typeof(Class)); // create initializers var bindings = d.S

试图从T类型的给定列表中选择少数列

获得以下代码:

        var myList = new List<Class>(){ //data};

        // new statement "new Data()"
        var xNew = Expression.New(typeof(Class));

        // create initializers
        var bindings =
            d.Select(o =>
            {

                // property "Field1"
                var mi = typeof(Class).GetProperty(o.Name);

                // original value "o.Field1"
                var xOriginal = Expression.Property(parameter, 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<Class, Class>>(xInit, parameter);

        var compiled = lambda.Compile();

        var res = myList.Select(compiled).ToList();
但是,在res中,我得到了T类型的所有列。我只希望变量d中的列出现在我的结果中


例如,我的类型T几乎有100列,但我只想每T选择10列,并且已经发送了d中的所有10列。

变量d是什么?它仅在代码段中使用,未定义。也不确定我想选择10列是什么意思。C类中的类将具有为其声明的所有字段。首先,C类中没有列,它是属性或字段。那么,我得到所有T型列是什么意思?所有这些列都有数据吗?或者,它们出现在结果类型中,但填充了默认值,但您填充的10个值除外?如我所见,您可以在运行时生成一个新类,或者使用dynamic with ExpandoObject。还有一个问题是,您希望如何使用返回的类型。迭代后将如何使用?您打算用lambda做什么?请通过显示一些代码更新您的问题。