0

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

这可能吗?

@@编辑

我有一个用于业务逻辑的自定义类,但我IList只公开维护我的代码解耦(否IQueryable)。所以,如果你想执行一些投影,你可以用逗号分隔符填充我的属性字符串:

BusinessClass.SelectFields = "Name, Surname, City";

但顺便说一下,键入错误的属性名称很容易,所以我更喜欢 lambda:

BusinessClass.SelectField = p => new {p.Name, p.Surname, p.City};
4

2 回答 2

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

输出:

在此处输入图像描述

于 2013-07-29T21:28:33.953 回答
0

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

于 2013-07-29T20:59:15.983 回答