1

如果我有这样的结构

 专辑
    - 专辑
        - 光盘
            - 曲目

我想按第一张光盘上第一首曲目的标题订购专辑集合。

有没有类似于以下我可以做的事情(请记住,我需要使用接受字符串的 OrderBy 扩展方法)?

albums.OrderBy("Discs[0].Tracks[0].Title")

我需要能够使用字符串表达式进行排序,因此需要使用 OrderBy 方法,即专辑.OrderBy("Track[0].Title")。原因是我们的自定义框架使用从 GridView 传回的排序表达式(例如“Title”),该表达式在字典中查找(例如“Track[0].Title”)以获取正确的 order by 子句。也就是说,排序的字段和方向是在运行时动态确定的。

或者

albums.OrderBy("Discs.First().Tracks.First().Title")
4

4 回答 4

3

未经测试,但如何:

    var query = from album in albums
                let disc = album.Discs.First()
                let track = disc.Tracks.First()
                orderby track.Title
                select album;
于 2009-03-03T01:09:30.237 回答
2

LINQ 有两种方法可以查询“from .in ..”和 Lambda 表达式。他们几乎写它的方式看起来像 Lambda 一样。这将是 Lambda 表达式:

Albums.OrderBy(a=>a.Discs.First().Tracks.First().Title)

我使用变量“a”来表示专辑,但您可以使用任何变量,这与第一个表达式相同:

Albums.OrderBy(album=>album.Discs.First().Tracks.First().Title)

或者您可以使用 from obj in obj 形式作为其他答案中的提及。

于 2011-10-26T17:23:48.793 回答
0

怎么样,为了满足您对不执行排序的初始查询的需求?这使用匿名类型来存储专辑信息,以及第一首曲目的名称,以便您稍后对其进行排序。

var query = from album in albums
            let disc = album.Discs.First()
            let track = disc.Tracks.First()
            select new { Album = album, FirstTrack = track.Title };

var sortedQuery = from album in query
                  order by album.FirstTrack
                  select album.Album;
于 2009-03-03T18:54:47.990 回答
0

对不起人们,

看起来我正在询问并尝试使用的 OrderBy 方法特定于我们正在使用的 ORM(genom-e),并且没有反映在 .net Queryable 或 IEnumerable 类上(不像大多数 genom-e 的 LINQ功能)。.net 中没有接受字符串的 OrderBy 重载,这是特定于基因组的。

那些使用 .net 遇到类似问题的人可能应该尝试上述两个答案中的任何一个

于 2009-03-04T07:12:56.983 回答