В проекте C#
я хочу иметь возможность создать функцию, которая принимает объект IQuereable<User>
вместе с несколькими лямбда-выражениями, а затем преобразует его в другой объект.Однако вместо того, чтобы извлекать все доступные свойства из базы данных, я хочу получить только те свойства, которые предоставлены функции.Вот логика, которой, как мне кажется, нужно следовать
- . Выясните, какие свойства мне нужно выбрать
- Создайте IEnumerable из IQueryable, указав, какие свойства необходимы.
- Выполните итерацию по каждому выбранному свойству и создайте объект
Student
.
Другими словами, если я вызову .ToList()
для объекта IQuereable<User> users
, запрос выберет*
из таблицы базы данных, которая вытягивает все доступные столбцы.Вместо этого я хочу выбрать только те свойства, которые передаются как выражения labda.
Вот мой код
public IEnumerable<Student> Make(IQuereable<User> users, Expression<Func<User, dynamic>> keyProperty, params Expression<Func<User, dynamic>>[] propertiesToSelect)
{
var students = new List<Student>();
// Make a distinct list of lambda's expressions that I need to select
var props = propertiesToSelect.ToList();
props.Add(keyProperty);
props = props.Distinct().ToList();
// TO DO!!! Some how, I need to only select the properties that are in **props** array insted of pulling all available properties
var selectableUsers = users.Select(/**/).ToList();
foreach(var user in selectableUsers)
{
var student = new Student();
foreach(Expression<Func<User, object> exp in props)
{
var prop = GetPropertyInfo(user, exp)
object value = prop.GetValue(user, null);
// Set the property student property
// Do somthing with prop.Name...
// Do something with value...
}
students.Add(student);
}
return strudents;
}
Вопрос Как использовать LINQ для выбора толькосписок выражений