我有一个数据源,我不想绑定X的集合。 X应包含某个类型Y的属性的子集(假设Y具有属性PropOne,PropTwo,PropThree) 这当然可以使用匿名类型完成:
void DoBind()
{
myGrid.DataSource = myCollectionOfYs.Select(y => new {y.PropOne, y.PropTwo});
}
如何修改此方法,以便它的调用者可以以类型安全的方式指定在投影中使用哪些属性?即一些事情:
var expressions = new List<Expression<Func<Y, object>>>();
expressions.Add(y => y.PropOne);
expressions.Add(y => y.PropTwo);
DoBind(expressions);
答案 0 :(得分:2)
您是否可以将选择器功能传递给DoBind方法:
public static void DoBind<T, TResult>(ICollection<T> collection, Func<T,TResult> selector)
{
DataSource = collection.Select(selector)
}
然后像这样调用它:
DoBind(list, y => new { y.Prop1, y.Prop2 });
DoBind(list, y => new { y.Prop3, y.Prop2 });
答案 1 :(得分:2)
使用你的想法:
void DoBind(Func<Y, object> func)
{
myGrid.DataSource = myCollectionOfYs.Select(funct);
}
并使用如下:
DoBind(y => new {y.PropOne});