LINQ to Entities Join в DateTime.DayOfWeek

Представьте себе две таблицы: Смены, RANK_S_DAY. Shifts содержит столбец ShiftDate, который является DateTime , а RANK_S_DAY имеет столбец DayOfWeek . Мне нужно присоединиться к (int) ShiftDate.DayOfWeek равно DayOfWeek . Я понимаю, почему это не сработает, но я не совсем уверен, как я могу это изменить. Исключением является:

Указанный член типа DayOfWeek не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей.

Насколько я понимаю, LINQ не может перевести (int) ShiftDate.DayOfWeek в то, что понимает SQL, есть идеи?

Здесь это код:

Shifts = from s in en.Shifts
join j in en.RANK_S_JOB on s.kronos_JobPositions.JobID equals j.JOBNO
join d in en.RANK_S_DAY on (int)s.ShiftDate.DayOFWeek equals d.DAY_OF_WEEK
orderby
 d.RANK,
 j.RANK ascending
select s;
6
задан NetMage 25 January 2019 в 23:21
поделиться

3 ответа

Похоже, я ничего не могу сделать на этом уровне. Итак, я создал хранимую процедуру, которая объединяет две таблицы и импортировала ее в Entity, создал функцию import, которая вернула сущность Shifts. Не уверен, что это лучший подход, но он работает и чист.

1
ответ дан 8 December 2019 в 12:17
поделиться

LINQ to SQL

var dayOfWeekCondition = (dt => dt.DayOfWeek == dayOfWeek);

LINQ to Entities

int dow = (int)dayOfWeek + 1; // SQL Day of week
var dayOfWeekCondition = (dt => SqlFunctions.DatePart(“weekday”, dt) == dow);

Источник:

http://blog.abodit.com/2009/07/entity-framework-in-net-4-0/

17
ответ дан 8 December 2019 в 12:17
поделиться

Интересно, что это отлично работает в Linq-to-Sql:

from o in Orders
join c in Categories on (int) o.OrderDate.Value.DayOfWeek equals c.CategoryID
where o.OrderDate != null
select c

Этот запрос не имеет смысла - Это просто случайные соединения с правильными типами данных. (Я использовал Northwind)

0
ответ дан 8 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: