Только начал изучать C# и сталкиваюсь с ошибками
Есть класс который вычисляет возраст из даты в виде 1912-07-25 16:28:07, которая хранится в базе данных
{
public partial class Runner
{ // метод вычисления возраста
public int getYear
{
get
{
var a = DateOfBirth.ToString();
var b = a.Split('.');
var c = b[2].Split(' ');
return DateTime.Now.AddYears(-Convert.ToInt32(c[0])).Year;
}
}
}
}
и так же есть датагрид который сортируется по комбобоксам и по возрасту(getYear) который мы сравниваем с категорией возраста(в данном случае до 18 лет)
private void Update()
{ // сортировка по комбобоксам
{
grid.ItemsSource = null;
grid.ItemsSource = AppData.Ent.RegistrationEvents.
Where(x => x.EventId == Marathon.SelectedValue.ToString() &&
x.Event.EventType.EventTypeId == Distance.SelectedValue.ToString() &&
x.Registration.Runner.Gender == (string)CBGender.SelectedValue &&
x.Registration.Runner.getYear < 18).ToList();
}
}
так вот при сортировке выскакивает ошибка,помогите как ее исправить?
System.NotSupportedException: "The specified type member 'getYear' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."
Предположу, что вы используете EntityFramework
. Тогда exception
вылетает потому, что EntityFramework
пытается сконвертировать ваше условие в SQL
запрос, но не может, ибо вы сами добавили поле getYear
.
Решить проблему можно так:
grid.ItemsSource = AppData.Ent.RegistrationEvents
.Where(x => x.EventId == Marathon.SelectedValue.ToString() &&
x.Event.EventType.EventTypeId == Distance.SelectedValue.ToString() &&
x.Registration.Runner.Gender == (string)CBGender.SelectedValue)
.ToList()
.Where(x => x.Registration.Runner.getYear < 18).ToList();
Дополнительный совет:
Поле getYear
можно переписать более красивым и универсальным способом:
//Такая запись аналогична данной вами
public int GetYear => (int)Math.Floor((DateTime.Now - DateOfBirth).TotalDays / 365); //365 дней в году
//Если всё-таки хочется оставить ваш стиль
public int getYear
{
get
{
TimeSpan timeSinceBirth = DateTime.Now - DateOfBirth;
return (int)Math.Floor(timeSinceBirth.TotalDays / 365);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
ПриветсвуюЯ изучаю Xamarin и мне интересно как сделать так, чтобы на кнопке были блики, полутона и тд? Стандартных средств не хватает или Я в них...
Приподключении к БД возникла следующия ошибка
Пишу консольное приложение на C#, очень нужно перенести его на сервер под Linux Ubuntu, но не знаю какСлышал о проекте под названием Mono, но не понимаю...