【问题标题】:LINQ to Entities Join on DateTime.DayOfWeekLINQ to Entity 在 DateTime.DayOfWeek 上加入
【发布时间】:2010-08-18 23:21:08
【问题描述】:

想象两个表: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;

【问题讨论】:

    标签: sql linq join entities dayofweek


    【解决方案1】:

    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/

    【讨论】:

    • 太棒了,这就是我要找的!
    • @Jacob 刚刚更新了答案以包含相关代码... :)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-20
          • 2019-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多