在LINQ OrderBy中使用[0]或First()

时间:2009-03-03 01:02:04

标签: c# .net linq-to-sql .net-3.5 sql-order-by

如果我有这样的结构

  

相册
   - 相册
   - 光盘
   - 跟踪

我希望按照第一张光碟上第一首曲目的标题订购一系列专辑。

是否有类似我可以做的以下内容(请记住我需要使用接受字符串的OrderBy扩展方法)?

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

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

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

4 个答案:

答案 0 :(得分:3)

未经测试,但如何:

    var query = from album in albums
                let disc = album.Discs.First()
                let track = disc.Tracks.First()
                orderby track.Title
                select album;

答案 1 :(得分:2)

LINQ有两种方法可以查询“from.in ..”和Lambda表达式。他们几乎把它写成了Lambda-ish。这将是Lambda表达式:

  

albums.OrderBy(A => a.Discs.First()Tracks.First()标题)

我使用变量'a'来表示相册但你可以使用任何变量,这与第一个表达式相同:

  

albums.OrderBy(专辑=> album.Discs.First()Tracks.First()标题)

或者您可以在其他答案中使用obj形式的obj形式。

答案 2 :(得分: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;

答案 3 :(得分:0)

对不起,

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

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