Представьте себе две таблицы: Смены, 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;
Похоже, я ничего не могу сделать на этом уровне. Итак, я создал хранимую процедуру, которая объединяет две таблицы и импортировала ее в Entity, создал функцию import, которая вернула сущность Shifts. Не уверен, что это лучший подход, но он работает и чист.
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);
Источник:
Интересно, что это отлично работает в 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)