我正在使用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请求的结果。
有什么建议吗?
答案 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