6

想象两个表:Shifts,RANK_S_DAY。Shifts 包含一个 ShiftDate 列,DateTime而 RANK_S_DAY 有一个DayOfWeek列。我需要加入(int)ShiftDate.DayOfWeek equals 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;
4

4 回答 4

17

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

来源:

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

于 2010-08-18T23:45:52.023 回答
1

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

于 2010-08-19T00:17:36.407 回答
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
于 2012-09-13T08:43:36.837 回答
0

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

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

于 2010-08-19T01:08:11.700 回答