我有以下代码:
IQueryable<Guid> GetOrdered(IQueryable<Guid> ids)
{
return from id in ids join storedId in storedIds on id equals storedId.Id
orderby storedId.Something select id;
}
现在我想引入一个参数GetOrdered()
并可选地更改orderby
为orderby descending
. 像这样的东西:
IQueryable<Guid> GetOrdered(IQueryable<Guid> ids, bool descending)
{
// how do I insert descending into the query below?
return from id in ids join storedId in storedIds on id equals storedId.Id
orderby storedId.Something select id;
}
当然,我可以编写两个相同的查询——一个有orderby
,另一个有,orderby descending
但这意味着代码重复。
或者,我可以对无序集使用子语句,然后像在这个答案中那样有条件地对其进行排序,但问题是我需要Select()
一个特定的列,而后者Select()
将呈现一个无序的结果。
因此,我可以尝试制定一个“智能”订购条件,如以下答案所示:
var result = from w in widgets where w.Name.Contains("xyz")
orderby
flag ? w.Id : 0,
flag ? 0 : w.Id descending
select w;
但问题是我经常会有一个非数字列作为我需要订购我的集合的列。
在这些条件下如何有条件地反转排序顺序?