【问题标题】:Trying to get day of week (mon, tue etc..) in linq to sql试图在 linq to sql 中获取星期几(周一、周二等)
【发布时间】:2015-01-29 08:56:05
【问题描述】:

我正在为网格视图使用 linqdatasource。 在 linqdatasource_selecting 上,我编写了以下查询以传递给 e.Result

Select o.localID, o.delivery_date, 
dow = o.delivery_date.Value.DayOfWeek.ToString("ddd"), o.created_by
o.customer_name, o.customer.OrderNum
Order By delivery_date Descending

我遇到以下错误

方法 'System.String ToString(System.String)' 不支持 翻译成 SQL。

我看到有人说要投影o.delivery_date.Value.DayOfWeek.ToString("ddd") 使用 .ToLists 获得结果后

这样做的问题是我会降低从 gridview 分页的效率,因为 linq 将从所有页面而不是 gridiew 请求的页面获取结果。

有什么建议吗?

【问题讨论】:

    标签: c# asp.net vb.net linq linq-to-sql


    【解决方案1】:

    我不确定您是否需要在 linq 查询中使用 ToString。如果您只选择o.delivery_date.Value.DayOfWeek,您应该能够在设置网格视图时绑定到枚举名称

    <asp:TemplateField HeaderText="Day of Week">
        <ItemTemplate>
            <%# Enum.GetName(typeof(System.DayOfWeek),Convert.ToInt32(Eval("dow"))) %>
        </ItemTemplate>
    </asp:TemplateField>
    

    【讨论】:

    • SqlFunctions 可用于LINQ2Entities
    • 好地方...付费阅读问题! ;o) 我会修改我的答案。
    • 试过了。得到错误:This function can only be invoked from LINQ to Entities.
    • @boruchsiper - 检查更新,希望它会是你所追求的。
    【解决方案2】:

    我知道您要做什么,但我建议您不要在查询中格式化日期。

    DayOfWeek.ToString("ddd")属于表现层,不属于数据层。您的查询应该返回一个完整的 DateTime 对象,因此使用该查询的任何人都可以使用它做他们想做的事(显示或不显示星期几,使用美式格式、英文格式...)

    只有在您看来(假设这是一个 MVC 网站),您才应该格式化日期以按照您想要的方式显示。

    关于分页,您应该使用Skip()Take() 方法。例如,如果要显示第 6 页,并且每页有 20 条记录:

    var result = (Select o.localID, o.delivery_date, 
    dow = o.delivery_date, o.created_by
    o.customer_name, o.customer.OrderNum
    Order By delivery_date Descending).Skip(100).Take(20)
    

    【讨论】:

      【解决方案3】:

      为什么要将字符串格式化为 "ddd" ?这应该像 -

      Select o.localID, o.delivery_date,
      dow = o.delivery_date.Value.ToString("ddd"), o.created_by
      o.customer_name, o.customer.OrderNum
      Order By delivery_date Descending
      

      【讨论】:

      • 你说得对。无论哪种方式都会得到相同的错误
      • @boruchsiper,o.delivery_date.Value 是 DateTime 类型吗?还是什么?
      • o.delivery_date.Value is Of Date
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多