Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql LINQ将在DateTime.DayOfWeek上加入实体_Sql_Linq_Join_Entities_Dayofweek - Fatal编程技术网

Sql LINQ将在DateTime.DayOfWeek上加入实体

Sql LINQ将在DateTime.DayOfWeek上加入实体,sql,linq,join,entities,dayofweek,Sql,Linq,Join,Entities,Dayofweek,想象两张桌子:班次、排名和工作日。Shifts包含SHIFTTDATE列,该列为DateTime,RANK\u S\u DAY包含DayOfWeek列。我需要加入(int)ShiftDate.DayOfWeek等于DayOfWeek。我理解它为什么不起作用,但我不太确定如何改变它。例外情况是: LINQ to实体中不支持指定的类型成员“DayOfWeek”。仅支持初始值设定项、实体成员和实体导航属性 据我所知,LINQ无法将(int)ShiftDate.DayOfWeek转换为SQL能够理解的内

想象两张桌子:班次、排名和工作日。Shifts包含SHIFTTDATE列,该列为
DateTime
,RANK\u S\u DAY包含
DayOfWeek
列。我需要加入
(int)ShiftDate.DayOfWeek等于DayOfWeek
。我理解它为什么不起作用,但我不太确定如何改变它。例外情况是:

LINQ to实体中不支持指定的类型成员“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;

LINQ到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);

资料来源:


在这个级别上,我似乎无能为力。所以我所做的是创建一个存储过程,连接两个表并将其导入实体,创建一个函数导入,返回一个移位实体。不确定这是否是最好的方法,但它有效且干净。

有趣的是,这在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

那个查询毫无意义——它只是一些具有适当数据类型的随机连接。(我用的是北风)

太棒了,这就是我要找的@Jacob刚刚更新了答案以包含相关代码…:)
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