试图在linq到sql中获取星期几(星期一,星期二等)

时间:2015-01-29 08:56:06

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

我正在使用linqdatasource进行gridview。 在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请求的结果。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我不确定您是否需要在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>

答案 1 :(得分:0)

我看到你要做的是什么,但我建议不要在查询中格式化日期。

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)

答案 2 :(得分:-1)

为什么要将字符串格式化为“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