Как использовать DayOfWeek для даты и времени в запросе LINQ на .Net CORE

Я пытаюсь использовать DayOfWeek в запросе LINQ, но это не работает. Я использую фреймворк .Net Core 6.

Я пытался:

var test =  await _context.DailyConsumption.Where(t => t.Time.DayOfWeek == DayOfWeek.Sunday).ToListAsync();

--

var test =  await _context.DailyConsumption.Where(t => EntityFunctions.TruncateTime(t.Time).Value.DayOfWeek == DayOfWeek.Sunday).ToListAsync();

и

DateTime firstDate = new DateTime(1753, 1, 7);
var test =  _context.DailyConsumption.Where(t => EntityFunctions.DiffDays(firstDate, t.Time) % 7 == 1).ToListAsync();

3 строки кода выше дают мне тот же результат:

InvalidOperationException: The LINQ expression 'DbSet<DailyConsumption>().Where(d => (int)d.Time.DayOfWeek == 0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'

Моя программа даже не может перевести код в SLQ-запрос, не понимаю почему.

Согласно некоторым источникам в Интернете, DayOfWeek нужно использовать по-другому в .NET Core framework. Я застрял, людей с этой проблемой не много...

РЕДАКТИРОВАТЬ : Если это может помочь, вот моя модель:

 [Keyless]
public partial class DailyConsumption
{
    public string Prm { get; set; } = null!;
    public DateTime Time { get; set; }
    public float Power { get; set; }
    public float PowerConsumption { get; set; }
}

Какой тип t.Time? Это DateTime?

nbokmans 21.11.2022 13:34

Да, это dateTime, я просто добавил модель, которую использую, к своему вопросу.

sylvaing 21.11.2022 13:36

см. stackoverflow.com/questions/68737681/…, похоже, проблема в том, что вы не можете использовать Where в его обычной форме с Entity Framework.

frankM_DN 21.11.2022 13:45

Помогает ли этот ответ? stackoverflow.com/questions/40271588/entity-framework-dayofw‌​eek

Scott Hannen 21.11.2022 21:08

@ScottHannen Нет, этот ответ мне не поможет, потому что человек не использует ядро ​​сети.

sylvaing 22.11.2022 08:52

@frankM_DN Этот ответ мне больше не помогает, я пытался сгенерировать свое предложение where, как они это делают, но он не работает

sylvaing 22.11.2022 08:53
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
6
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина в том, что в EF Core 3 отключена неявная оценка клиента.

Вы можете явно переключиться на оценку клиента, вставив вызов AsEnumerable, как показано ниже:

var test =  _context.DailyConsumption.AsEnumerable()
    .Where(t => t.Time.DayOfWeek == DayOfWeek.Sunday).ToList();

Просто обратите внимание, что это будет выполняться в памяти, а не в БД. Таким образом, все DailyConsumption будут загружены EF перед применением предложения Where и материализацией перечисления с помощью ToList()

Philippe 22.11.2022 10:24

Другие вопросы по теме