试图在 linq to sql 中获取星期几(周一、周二等)

Trying to get day of week (mon, tue etc..) in linq to sql

我正在为 gridview 使用 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

我遇到以下错误

Method 'System.String ToString(System.String)' has no supported translation to SQL.

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

获得结果后

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

有什么建议吗?

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

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

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

我明白您要做什么,但我建议您不要在查询中设置日期格式。

DayOfWeek.ToString("ddd")属于表现层,不属于数据层。你的查询应该 return 一个完整的 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)