如何使用VB.Net Lambda表达式按多列排序

20
我在这个网站上进行了简要搜索并谷歌搜索过,但似乎找不到一个好的例子。我仍然在试图理解整个“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 by,虽然它编译和运行了,但似乎没有按照我想要的顺序返回数据。
Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).OrderBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList

提前表示感谢。

2个回答

46

我在快速的谷歌搜索中发现了这篇MSDN文章。 我猜你要找的就是这个:

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

谢谢,这正是我在寻找的。如果可以问一下,你用了什么谷歌搜索词来找到那篇文章? - camainc
1
哇,我一直在做(我认为是)完全相同的事情,但它不起作用,我一直得到某种与Linq相关的异常...变得非常沮丧...然后我注意到我忘记了最后的“.ToList”部分。回想起来,我知道需要正确的数据类型很明显,但我想我当时正在经历那种“树木遮住森林”的时刻。感谢您提供的信息! - evilspoons

15

你应该像这样使用ThenBy

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

1
谢谢!你和HuBeZa同时回答了这个问题,但由于你已经拥有比他更多的徽章,所以我把答案给了他。 - camainc
顺便提一句,如果您需要自己的 IComparer,您必须使用它两次(一次用于 .OrderBy,一次用于 .ThenBy 命令)。只需添加 , New MyOwnIComparer,当然还要添加名为 MyOwnIComparer 的类的代码。 - PeterCo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接