次のコードがあります。
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;
}
もちろん、2 つの同一のクエリを作成することもできます。1 つは with でorderby
、もう1 つは with です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;
しかし、問題は、セットを順序付けする必要がある列として、数値以外の列を使用することがよくあることです。
これらの条件下で条件付きで並べ替え順序を逆にするにはどうすればよいですか?