如果我有这样的结构
相册
- 相册
- 光盘
- 跟踪
我希望按照第一张光碟上第一首曲目的标题订购一系列专辑。
是否有类似我可以做的以下内容(请记住我需要使用接受字符串的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")
答案 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遇到类似问题的人应该尝试上述两个答案中的任何一个。