У меня есть коллекция IEnumerable. В запросе LINQ, желательно, я хотел бы выбрать только свойства в этой коллекции из типа T в анонимный тип, где T является бизнес-объектом POCO.Динамический выбор списка свойств от объекта
Пример:
Мои IEnumerable содержит свойства "Имя", "Возраст".
Мои РоКо:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
}
Я хочу, чтобы достичь того же эффекта, как показано ниже, но без жесткого кодирования членов анонимного типа, и вместо того, чтобы с помощью моей коллекции PropertyInfo.
IEnumerable<Person> peeps = GetPeople();
var names = from p in peeps
select new {Name = p.Name, Age = p.Age};
Если я использую Entity Framework, я мог бы использовать Entity SQL с динамически сконструированным пунктом строки where
, но, хотя и не строго жестким код, я до сих пор использую строковые имена свойств.
Добавлено: Могу ли я не возможно динамически построить выражение для метода проекции .Select, который определяет, какие свойства включены в объекте результата?
Я экспортирую коллекцию объектов JobCard. Свойства каждого объекта, который должен быть включен в CSV-представление объекта, зависят от роли пользователя. На данный момент я просто просматриваю список свойств, включенных для роли и использую отражение, чтобы получить их значения из каждого объекта JobCard. В качестве примера я использовал только «var». Могу ли я не использовать «динамический»? Я ничего не знаю об этом. – ProfK
динамика не помогла бы в этом случае. Я думаю, что отражение - ваш единственный вариант ... –
см. Мое редактирование. Я знаю, что я сказал «в запросе LINQ», но для интереса ограничение на набор динамических свойств зависит от платформы и может быть достигнуто с помощью Entity Framework. – ProfK