开发者

LINQ sorting, doesn't work

开发者 https://www.devze.com 2022-12-18 17:26 出处:网络
I have a LINQ query like this: from i in _db.Items.OfType<Medium>() from m in i.Modules from p in m.Pages

I have a LINQ query like this:

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

I use the query like this because I have strongly typed view (ASP.NET MVC).

I need to have items sorted by the i开发者_高级运维.Sort property. orderby i.Sort and i.OrderBy(it => it.Sort) doesn't work. How can I fix this?


When sorting with Linq you usually give OrderBy a property, and eventually an IComparer, not a sorting function. For example:

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);
    }
}

Here Linq will know how to correctly sort integers.

Without giving more context (such as what exactly is i.Sort, what is its purpose, what do you want to do with it), it would be difficult to be more specific to your problem.

However, I'm pretty sure you are misunderstanding OrderBy: you should give it a lambda expression that identifies a property of the objects contained in your sequence, and then Linq will sort your sequence according to the usual order of the type of that property (or according to another order you define for that type, by using IComparer).


Let's say your Pages include page-numbers among their properties. Let's pretend this property is called "pagenumber". You would then add the following 'orderby' line between the 'where' and 'select' lines.

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

Or maybe you don't have page numbers, but only page titles. You would do nearly the same thing:

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

Just from reading your code, I can't tell what criteria should be used for sorting. You need some kind of ordered element, an id number, a page number, or some text can be alphabetized.


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

精彩评论

暂无评论...
验证码 换一张
取 消