C# 用于选择特定列的动态linq lambda表达式
试图从T类型的给定列表中选择少数列 获得以下代码: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
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做什么?请通过显示一些代码更新您的问题。