2

次のコードがあります。

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;

しかし、問題は、セットを順序付けする必要がある列として、数値以外の列を使用することがよくあることです。

これらの条件下で条件付きで並べ替え順序を逆にするにはどうすればよいですか?

4

2 に答える 2

3

Linq で条件付き OrderBy を実現するには、次のようにします。

var flag = sortOrder == "asc";

result.OrderBy(o => flag ? o.Something: "").ThenByDescending(o => flag ? "" : o.Something).ToList();

私のために働きます。

于 2014-02-10T11:21:15.997 に答える