【问题标题】:How to order by multiple columns using VB.Net lambda expressions如何使用 VB.Net lambda 表达式按多列排序
【发布时间】:2009-11-16 17:33:30
【问题描述】:

我已经对该网站进行了简短的搜索,并在 Google 上搜索过,但似乎找不到一个好的示例。我仍在努力理解整个“Lambda 表达式”。

这里谁能给我一个使用 VB.Net 和 Linq-to-SQL 使用 lambda 表达式按多列排序的示例?

这是我现有的代码,它返回一个使用单列排序结果的有序列表:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).ToList

注意:WebCategory 对象有一个子 WebPage 对象(基于外键)。我想先按 WebPage.DisplayOrder 订购,然后按 WebCategory.DisplayOrder 订购。

我尝试链接 order bys,如下所示,虽然它编译并运行,但它似乎没有按我想要的顺序返回数据。

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).OrderBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList

提前致谢。

【问题讨论】:

    标签: vb.net linq linq-to-sql lambda


    【解决方案1】:

    我在 Google 快速搜索中找到了 this MSDN article。 我猜你要找的是这个:

    Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder). _
    ThenBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList
    

    【讨论】:

    • 谢谢,这正是我想要的。如果我可以问一下,您用来查找那篇文章的 Google 搜索字词是什么?
    • 哇,我正在做(我认为是)这个,但它不起作用,我遇到了某种与 Linq 相关的异常......变得非常沮丧......然后我注意到我忘记了最后一个“.ToList”部分。我知道回想起来很明显,它需要是正确的数据类型,但我想我正在经历那些“为树而生”的时刻之一。感谢您的信息!
    【解决方案2】:

    你应该像这样使用ThenBy

    Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder) _
                                   .ThenBy(Function(c As WebCategory) c.WebPage.DisplayOrder) _
                                   .ToList()
    

    【讨论】:

    • 谢谢!你和HuBeZa同时回答了这个问题,但是你的徽章已经比他多,所以我把答案给了他。
    • 顺便说一句:如果您需要自己的 IComparer,则必须使用两次(一次用于 .OrderBy,一次用于 .ThenBy 命令)。只需添加, New MyOwnIComparer,当然还有您的班级代码,名称为 MyOwnIComparer
    猜你喜欢
    • 2011-01-13
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多