2009-11-16 40 views
18

我已经完成了对此网站的简短搜索,并使用了Google搜索,但似乎无法找到一个好例子。我仍然试图让我的头在整个“Lambda表达式”的事情。如何使用VB.Net lambda表达式按多个列排序

这里的任何人可以给我一个例子,使用VB.Net和Linq-to-SQL使用lambda表达式来排序多列吗?

这里是我现有的代码,使用单柱下令其结果返回一个有序列表:

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

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

我尝试链接顺序bys,就像下面一样,虽然它编译并运行,但它似乎没有以我想要的顺序返回数据。

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

在此先感谢。

回答

39

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

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

感谢,这正是我一直在寻找。 如果我可能会问,您用来查找该文章的Google搜索词是什么? – camainc 2009-11-16 19:58:59

+1

哇,我正在做(我以为是)正是这个,它不会工作,我正在得到某种Linq相关的异常......变得令人难以置信的沮丧......然后我发现我忘记了最后一个“.ToList “部分。我知道很明显,回想起来它需要是正确的数据类型,但我想我有一个“森林树木”时刻。感谢您的信息! – evilspoons 2012-06-14 14:39:00

12

你应该使用ThenBy这样的:

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

谢谢!你和HuBeZa同时回答了这个问题,但既然你已经有了比他更多的徽章,我就给了他答案。 – camainc 2009-11-16 19:59:55

+0

BTW:如果你需要你自己的IComparer,你必须使用它两次(一次为.OrderBy,一次为.ThenBy命令)。只需添加',New MyOwnIComparer',当然也可以添加名为MyOwnIComparer的类的代码 – PeterCo 2016-11-13 10:46:24