LINQ似乎缺少的一件事是通过文本字符串引用列的方法。例如,我有一个典型的GridView设置,像这样排序(DataSource绑定到代码隐藏中的LINQ查询):
<asp:GridView ID="MyGridView" runat="server" AllowSorting="True">
<Columns>
<asp:BoundField DataField="field1" SortExpression="field1" HeaderText="Field 1" />
<asp:BoundField DataField="field2" SortExpression="field2" HeaderText="Field 2" />
<%-- etc. --%>
</Columns>
</asp:GridView>
为了使排序起作用,我必须在MyGridView_Sorting事件处理程序中使用两个巨大的Select语句(以处理升序和降序):
Dim query = From t In context.MyTables
If e.SortDirection = SortDirection.Ascending Then
Select Case e.SortExpression
Case "field1"
query = query.OrderBy(Function(x) x.field1)
Case "field2"
query = query.OrderBy(Function(x) x.field2)
'etc.'
End Select
Else
Select Case e.SortExpression
Case "field1"
query = query.OrderByDescending(Function(x) x.field1)
Case "field2"
query = query.OrderByDescending(Function(x) x.field2)
'etc.'
End Select
End If
必须有更好的方法来做到这一点,不是吗?我从网格中获取字段名称和排序方向 - 您认为有一种方法可以轻松地将其提供给LINQ查询,而无需逐字段翻译。谁有更好的方法?