LINQ排序,不起作用

时间:2010-02-02 21:25:09

标签: asp.net asp.net-mvc linq entity-framework linq-to-entities

我有这样的LINQ查询:

from i in _db.Items.OfType<Medium>()
from m in i.Modules
from p in m.Pages
where i != null && i.Type == 1 && i.Published == true && p.PageId == 2
select p

我使用这样的查询,因为我有强类型视图(ASP.NET MVC)。

我需要按i.Sort属性排序项目。 orderby i.Sorti.OrderBy(it => it.Sort)不起作用。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

使用Linq进行排序时,通常会给OrderBy一个属性,最后给IComparer,而不是排序函数。例如:

class Person {
    public int Age {get; set;}
}

public static void Main() {
    var ps = new List<Person>();
    ps.Add(new Person{Age = 1});
    ps.Add(new Person{Age = 5});
    ps.Add(new Person{Age = 3});

    var sorted = ps.OrderBy(p => p.Age);

    foreach(p in sorted) {
        Console.WriteLine(p.Age);
    }
}

Linq将知道如何正确排序整数。

如果没有提供更多上下文(例如究竟是i.Sort的内容,它的目的是什么,你想用它做什么),那么你的问题将更加具体化。

但是,我很确定你误解了OrderBy:你应该给它一个lambda表达式来识别你序列中包含的对象的属性,然后Linq会排序您的序列根据该属性类型的通常顺序(或根据您为该类型定义的另一个顺序,使用IComparer)。

答案 1 :(得分:0)

假设您的页面在其属性中包含页码。让我们假装这个属性叫做“pagenumber”。然后,您将在“where”和“select”行之间添加以下“orderby”行。

// (snip...)
where i != null && i.Type == 1 && i.Published == true && p.PageId == 2
orderby p.pagenumber
select p

或者您可能没有页码,只有页面标题。你会做同样的事情:

where i != null && i.Type == 1 && i.Published == true && p.PageId == 2
orderby p.title
select p

仅仅是阅读你的代码,我不知道应该使用什么标准进行排序。您需要某种有序元素,ID号,页码或某些文本可以按字母顺序排列。

答案 2 :(得分:0)

from i in _db.Items.OfType<Medium>().OrderBy(x => x.Sort)
...