как вызвать метод в Linq?
Пытаюсь вызвать локальный метод внутри Linq, в методе нужно преобразовать год рождение в возраст пример (01.01.2000 => 21)
public AdminPanel()
{
InitializeComponent();
db = new ContextDB();
var context = (from us in db.Users
join ro in db.Roles on us.RoleId equals ro.Id
join of in db.Offices on us.OfficeId equals of.Id
select new
{
firstname = us.Firstname,
lastname = us.Lastname,
age = Calculate(us.Birthdate),
role = ro.Title,
email = us.Email,
id = us.Id,
office = of.Title,
active = us.Active
}).ToList();
DataContext = context;
}
private string Calculate(string birthdate)
{
return "abc";
}
Получаю исключение
Ответы (1 шт):
Автор решения: Uranus
→ Ссылка
Выражение, которое вы передаёте в метод Select, используется для построения SELECT части SQL запроса. А метод Calculate нельзя вызвать при выполнении запроса на SQL сервере.
Есть три варианта решения:
- Вставить тело метода прямо в Select. В приведенном вами примере это будет выглядеть так (но я понимаю что на самом деле тело метода сложнее и возможно не поместится в Select):
select new {
...
age = "abc"
}
- Удалить age из Select, а после ToList продублировать тот же самый Select но уже с age.
- Объявить класс, в котором будут все поля упомянутые в Select. При этом age будет только для чтения, и для вычисления значения age будет использовать метод Calculate. Тогда вы сможете использовать этот класс в методе Select:
select new MyClass() {
firstname = us.Firstname,
...
}
