自定义选择投影

时间:2013-07-29 20:55:04

标签: c# linq

我有一个带有一些属性的简单类,我希望能够公开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};

2 个答案:

答案 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});

输出:

enter image description here

示例2:

  Person p = new Person();
  p.Address = "TestAdress";
  p.City = "TestCity";
  var x = p.SelectProjection<dynamic>(() => new {p.Address, p.City});

输出:

enter image description here

答案 1 :(得分:0)

是的,这是可能的。研究代表,IEnumerable<T>yield return声明。如果不确切知道你想要完成什么,就很难给出更准确的答案。