asp.net - 基于用户首选项的LINQ查询

标签 asp.net vb.net

我怎样才能做得更好(所以它实际上可以工作:)

我有一个LINQ查询,其中包括基于用户偏好的订单。用户可以决定是否要按升序或降序排列结果。

If fuserclass.SortOrder = "Ascending" Then
   Dim mydat = (From c In dc.ITRS Order By c.Date Ascending Select c)
Else
   Dim mydat = (From c In dc.ITRS Order By c.Date Descending Select c)
End If

For each mydata in mydat ***<<<error "mydat is not declared"***

我知道我可以将For Each循环放在If和Else内,但这对于两次具有相同代码的做法似乎很可笑。我知道您知道更好的方法:)

最佳答案

使用扩展方法和基于函数的LINQ(我的VB像 hell 一样使用rust )

VB.NET:

<ExtensionAttribute> _
Public Shared Function OrderByString(Of TSource, TKey) ( _
source As IEnumerable(Of TSource), _
keySelector As Func(Of TSource, TKey) _
    strType As String) As IOrderedEnumerable(Of TSource)

    If strType = "Ascending" Then
        return source.OrderBy(keySelector)
    Else
        return source.OrderByDescending(keySelector)
    End If
End Function

C#.NET:
public static IOrderedEnumerable<TSource> OrderByString(
    this IEnumerable<TSource> source, 
    Func<TSource, TKey> keySelector,
    string strType)
{
    if (strType == "Ascending")
        return source.OrderBy(keySelector);
    return source.OrderByDescending(keySelector);
}

然后像这样调用您的查询:
Dim mydat = dc.ITRS.OrderByString(Function(item) item.Date, fuserclass.SortOrder)

或在C#上:
var mydat = dv.ITRS.OrderbyString(item => item.Date, fuserclass.SortOrder);

关于asp.net - 基于用户首选项的LINQ查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815297/

相关文章:

c# - 如何将多个 Json 对象传递给 ASP.net MVC Controller ?

javascript - ASP.NET Javascript 服务服务器端渲染特定路由

wpf - 如何将 CollectionContainer 绑定(bind)到 View 模型中的集合?

c# - 从空白启动时 VSTO 功能区不显示解决方案

c# - 在一行代码中初始化对象属性

vb.net - WP7 MVVM 如何从 ViewModel 调用 me.setfocus()?

c# - 等效于内联输出参数声明?

c# - 在上传期间调整和优化网页图像的最佳类别是什么?

asp.net - 如何使用javascript从单选按钮列表中查找所选项目

asp.net - 调整菜单以覆盖菜单宽度