【问题标题】:Linq To Sql - Get week day name from dateLinq To Sql - 从日期获取工作日名称
【发布时间】:2015-06-10 06:15:42
【问题描述】:

是否可以构造一个查询,在其中我可以将日期中的工作日名称检索到单独的列或变量中?

我知道我可以很容易地在 .NET 端执行此操作,但希望它出现在查询中。

【问题讨论】:

  • 我能问一下您为什么希望它出现在查询中吗?您想使用哪种文化?
  • 我有一个工作班次表,它按工作日名称保存每条记录,所以星期一、星期二等。每条记录都有一个开始时间和结束时间,例如:上午 9 点到下午 5 点。我需要弄清楚在轮班时间内完成了哪些工作。

标签: linq linq-to-sql


【解决方案1】:

你也可以使用 SqlFunctions...

var results=context.Listings
  .Select(l=>System.Data.Entity.SqlServer.SqlFunctions.DateName("dw",l.modify_date));

当然,这仅在使用 SQL Server 时有效。跨数据库的方法是使用具有已知日期的 EntityFunctions.DateDiff 来获取任何日期与已知的前一个星期日之间的天数,然后取模数 7,然后转换为字符串。

【讨论】:

  • 我已经添加了对System.Data.Entity 的引用,但它仍然在抱怨'SqlServer' is not a member of 'Entity'
  • 抱歉,如果您使用的是 Linq to Sql,请尝试System.Data.Objects.SqlClient.SqlFunctions.DateName。它与用于实体框架的 System.Data.Entity.SqlServer.SqlFunctions 非常相似。
  • @RobertMcKee 是否可以根据文化获得这个值?
  • @YusrilMaulidanRaji 可能不会,我也不建议您按照 OP 的要求从数据库中返回一周中的一天。我建议您从控制器(或 DAL)中的数据库中返回实际的日期/日期时间,然后在视图中根据需要对其进行格式化。在您的控制器中,var results = context.Listings.Select(l=>l.modify_date),然后在您的视图中,loopvariable.ToString("dddd").ToString("dddd") 将使用当前线程文化,或者如果需要覆盖它,您可以传入不同的文化作为第二个参数。
  • 以上假设您正在做一个 MVC 应用程序。对于控制台/桌面/服务,请根据您的最佳判断将数据层与表示层分离的位置/方式。 WebAPI/RestAPI 类型的应用程序根本不应该以特定的文化发回数据。
【解决方案2】:

您可能需要构建返回日期名称的查询,然后在第几天加入您的结果

int[] dayNum={1,2,3,4,5,6,7};

var result = from d in dayNum
    let dayOfWeek= (d == 1 ? "Monday" :
            d==2 ? "Tuesday" :
            d==3 ? "Wednesday" :
            d==4 ? "Thursday" :
            d==5 ? "Friday" :
            d==6 ? "Saturday" :
            d==7 ? "Sunday":"")
   let dn = d
 group d by new {dayOfWeek, dn} into dw
 select new { dw.Key.dayOfWeek, dw.Key.dn};

结果是

【讨论】:

  • 您需要帮助将提供的表格与您的结果结合起来以使其正常工作吗?
  • 最后我以其他方式做到了,但感谢所有提供帮助的人。
猜你喜欢
  • 2021-08-22
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 2015-02-24
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多