DayOfWeek в запросе LINQ - PullRequest
1 голос
/ 06 мая 2020

У меня есть простой список целых чисел, обозначающих дни недели. Я пытаюсь проверить, находится ли свойство Date моей сущности в выбранные дни недели. Но если я попытаюсь передать его в запросе, ориентированном на базу данных, например:

query.Where(e => selectedDaysOfWeek.Contains((int)e.Date.DayOfWeek));

, я получу исключение:

Выражение LINQ ... не может быть переведено. Либо перепишите запрос в форме, которая может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c ().

Если я, с другой стороны, сначала выполняю запрос, вызывая ToList() (например), а затем добавляю то же условие where в результирующий список, оно работает:

var items = query.ToList();
items = items.Where(e => selectedDaysOfWeek.Contains((int)e.Date.DayOfWeek)).ToList();

Хотя в моем случае это допустимо, я хотел бы получать меньше элементов из базы данных. Есть ли способ проверить DayOfWeek при запросе db в соответствии с моим первоначальным намерением?

1 Ответ

1 голос
/ 06 мая 2020

Вы получаете доступ к свойству DayOfWeek из ссылки DateTime в запросе.

Entity Framework «не знает», как преобразовать это в SQL, таким образом, в первом фрагменте кода вы получаете исключение.

И во втором фрагменте он работает после того, как вы получили все данные из базы данных при вызове .ToList(), и фильтрация .Where происходит в памяти.

Если вы wi sh для реализации этого logi c на стороне базы данных, вам придется написать свой собственный SQL оператор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...