2010-08-18 85 views
5

想象一下两个表格:Shifts,RANK_S_DAY。 Shifts包含一个ShiftDate列,它是DateTime,RANK_S_DAY有一个DayOfWeek列。我需要加入(int)ShiftDate.DayOfWeek等于DayOfWeek。我明白为什么它不起作用,但我不太清楚如何改变它。例外是:LINQ to Entities加入DateTime.DayOfWeek

LINQ to Entities不支持指定的类型成员'DayOfWeek'。仅支持初始化程序,实体成员和实体导航属性。

据我所知,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; 

回答

1

看来没有什么我可以在这个层面做。因此,我所做的是创建一个存储过程,将两个表连接起来并将其导入实体,创建一个返回Shifts实体的函数导入。不知道这是否是最好的方法,但它的工作原理和清洁。

+0

请将真实答案标记为“答案”。 – Monsignor 2016-01-27 07:06:59

15

的LINQ to SQL

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

LINQ到实体

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/

+0

真棒,这就是我一直在寻找! – Jacob 2013-02-19 14:26:27

+0

@Jacob只是更新了包含相关代码的答案...... :) – 2013-02-19 14:28:49

0

有趣的是,这个工作正常LINQ到SQL:

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

查询是没有意义的 - 它只是用正确的数据类型的一些随机连接。 (我正在使用罗斯文)

1
using System.Data.Objects.SqlClient; //Don't forget this!! 

//You can access to SQL DatePart function using something like this: 

YourTable.Select(t => new { DayOfWeek = SqlFunctions.DatePart("weekday", t.dateTimeField) - 1 }); //Zero based in SQL 

//You can compare to SQL DatePart function using something like this: 

DateTime dateToCompare = DateTime.Today; 
YourTable.Where(t => SqlFunctions.DatePart("weekday", t.dateTimeField) - 1 == dateToCompare }); //Zero based in SQL