4

我有一个不想绑定 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);
4

2 回答 2

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 });
于 2013-02-15T15:26:08.743 回答
2

使用您的想法:

void DoBind(Func<Y, object> func)
{
    myGrid.DataSource = myCollectionOfYs.Select(funct);
}

并使用如下:

DoBind(y => new {y.PropOne});
于 2013-02-15T15:29:45.633 回答