我有一个带有一些属性的简单类,我希望能够公开select
方法以返回另一个对象,(就像linq select方法一样)。例如:
class Person
{
public string Name{get; set;}
public string Address {get; set;}
public string City {get; set;}
public TItem SelectProjection(..);
}
Person p = new Person();
var other = p.SelectProjection(p => new { p.Name, p.City});
这可能吗?
@@ EDIT
我有一个业务逻辑的自定义类,但我公开IList
只是为了保持我的代码解耦(no IQueryable
)。
因此,如果要执行某些投影,可以使用逗号分隔符填充我的属性字符串:
BusinessClass.SelectFields = "Name, Surname, City";
但顺便说一句,很容易键入错误的属性名称,所以我更喜欢lambda:
BusinessClass.SelectField = p => new {p.Name, p.Surname, p.City};
答案 0 :(得分:1)
希望这就是你的意思。
public T SelectProjection<T>(Func<T> personFunc)
{
return personFunc();
}
Person p = new Person();
p.Address = "TestAdress";
var x = p.SelectProjection<dynamic>(() => new {p.Address});
输出:
示例2:
Person p = new Person();
p.Address = "TestAdress";
p.City = "TestCity";
var x = p.SelectProjection<dynamic>(() => new {p.Address, p.City});
输出:
答案 1 :(得分:0)
是的,这是可能的。研究代表,IEnumerable<T>
和yield return
声明。如果不确切知道你想要完成什么,就很难给出更准确的答案。