Пользовательский выбор проекции

У меня есть простой класс с некоторыми свойствами, и я хотел бы иметь возможность выставлять метод select для возврата другого объекта (как это делает метод выбора linq). Например:

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 (без IQueryable). Итак, если вы хотите выполнить какую-либо проекцию, вы можете заполнить мою строку свойств разделителем запятой:

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

Но, кстати, это легко манипулировать неправильным именем свойства, поэтому я предпочитаю лямбда:

BusinessClass.SelectField = p => new {p.Name, p.Surname, p.City};
2 ответа

Надеюсь, это то, что вы имеете в виду.

public T SelectProjection<t>(Func<t> personFunc) 
{
 return personFunc();
}

 Person p = new Person();
 p.Address = "TestAdress";
 var x = p.SelectProjection<dynamic>(() => new {p.Address});
</dynamic></t></t>

Вывод:

Пример 2:

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

Вывод:


Да, это возможно. Делегаты исследований, IEnumerable и оператор yield return. Не зная точно, чего вы пытаетесь достичь, трудно дать более точный ответ.

licensed under cc by-sa 3.0 with attribution.