在LINQ OrderBy中使用或First()

如果我有这样的结构

相册
– 专辑
– 光盘
– 曲目

我想按照第一张唱片上第一首曲目的标题订购一系列专辑。

是否有类似于以下我可以做的事情(请记住我需要使用接受字符串的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") 

未经测试,但如何:

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

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

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

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

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

或者您可以在其他答案中使用objforms的objforms。

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

 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; 

对不起的人,

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

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