在函数外部发送选择参数?

时间:2017-10-10 12:15:32

标签: c# entity-framework linq

我正试图从外面向一个函数发送两个选择参数。我想要实现的目标在下面简化

我有一个这样的模型,

public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
}

SampleData:
3 / Barrack / Obama
4 / Vladimir / Putin

和另一个模特

public class IdTextModel
{
    public string Id { get; set; }
    public string Text { get; set; }
}

我想创建一个像这样的函数

public List<IdNameModel> GetList(propselectorA, propselectorB){
    return data.Select(x => new IdTextModel(){
        Id = propselectorA,
        Text = propselectorB
    });
}

用法:

var list = GetList(x => x.Id, x => x.Surname);

ExpectedResult:
3 / Obama
4 / Putin

我怎样才能做到这一点?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Expression<Func<Entity,IdNameModel>>抽象出IdText的类型:

public List<T> GetList(
    Expression<Func<Entity,T>> selector
) {
    return data.Select(selector).ToList();
}

并将其称为:

var list = GetList(x => IdTextModel { Id = x.Id, Name = x.Surname } );

也可以为两个字符串属性传递选择器,但使用Zip会降低效率:

public List<IdTextModel> GetList(
    Expression<Func<Entity,string>> selectorId
,   Expression<Func<Entity,string>> selectorName
) {
    return data
       .Select(selectorId)
       .Zip(
           data.Select(selectorName)
       ,   (id, name) => new IdTextModel { Id = id, Name = name }
       ).ToList();
}