我正试图从外面向一个函数发送两个选择参数。我想要实现的目标在下面简化
我有一个这样的模型,
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
我怎样才能做到这一点?谢谢。
答案 0 :(得分:1)
您可以使用Expression<Func<Entity,IdNameModel>>
抽象出Id
和Text
的类型:
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();
}