У меня есть такой класс:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string LOANIDBPM { get; set; }
public string REPORTTYPE { get; set; }
}
У меня есть список студентов,
Я хочу отфильтровать студента в списке по LOANIDBPM
и REPORTTYPE
.
Обычно это код (с использованием linq)
public void GetListStudent(List<Student> listStudent)
{
listStudent = listStudent.Where(x => x.LOANIDBPM == "MIKEN" && x.REPORTTYPE == "DX").ToList();
}
Однако по какой-то причине я не могу явный «Список»,
Мое решение ниже:
public void GetListStudent(object[] listStudent)
{
ParameterExpression param = Expression.Parameter(listStudent.First().GetType(), nameof(listStudent));
Expression propLoanBPM = Expression.Property(param, "LOANIDBPM");
Expression<Func<string>> loanIdLampda = () => "MIKEN";
Expression searchLoanBPM = Expression.Equal(propLoanBPM, loanIdLampda.Body);
Expression propReportType = Expression.Property(param, "REPORTTYPE");
Expression<Func<string>> reportTypeLampda = () => "DX";
Expression searchReportType = Expression.Equal(propReportType, reportTypeLampda.Body);
Expression searchFinal = Expression.And(searchLoanBPM, searchReportType);
Expression<Func<???, bool>> lampda = Expression.Lambda<Func<???, bool>>(searchFinal, param);
listStudent = listStudent.Where(lampda).ToArray();
}
Приведенный выше код имеет две проблемы:
1: я не знаю тип ученика в функции выражения,
Я не могу использовать как:
Expression<Func< listStudent.First().GetType(), bool>> lampda = Expression.Lambda<Func< listStudent.First().GetType(), bool>>(searchFinal, param);
2: В методе Where требуется IQueryable
, но в моем коде есть Expression Func.
Извините за мой английский.
Большое вам спасибо