4

次のようなlinqクエリがあります

string sortby="Date"; //it can be name or something else as well

var query=(from t in Uow.Transactions.GetAllWithReferences()
           orderby t.Date descending
           select t);

しかし、sortby変数値に基づいて別の順序で並べ替えたいと思います。Linqを使用してそれを行うにはどうすればよいですか?

4

4 に答える 4

1

リフレクションの使用:

string sortby="Date" //it can be name or something else as well

var query=(from t in Uow.Transactions.GetAllWithReferences()
           orderby t.GetType().GetProperty(sortby).GetValue(t, null) descending
           select t);
于 2013-03-14T13:00:17.187 に答える
1

サンプルクラスの場合:

private class Tst
{
    public int field1 { get; set; }

    public string field2 { get; set; }

    public string field3 { get; set; }
}

あなたはこのようにそれを行うことができます:

var index = 1;

var sortedList = (from l in list
                  orderby index == 1 ? l.field1.ToString() : index == 2 ? l.field2 : l.field3  
                  select l);

しかし、フィールドにはさまざまな型があるため、ご覧のように型キャストを行う必要がありますl.field1.ToString()

ラムダを使用してそれを行う方法は次のとおりです。

var sortedList =
    list.OrderBy(l => 
            index == 1 ? l.field1.ToString() 
            : index == 2 ? l.field2 
            : l.field3)
        .Select(l => l).ToList();
于 2013-03-14T13:02:40.017 に答える
1

OrderBy()LINQ拡張メソッドを使用する場合は、次のような述語を渡すことができます(テストされていない)。

Predicate orderByClause;
if ( blah == "date" )
    orderByClause = { order => order.Date };

if ( blah == "something else" ) 
    orderByClause = { order => order.SomethingElse };

var oSortedList = oResultList.OrderBy( orderByClause );

構文がうまくいかない場合は確かですが、私は以前にこのようなことをしたことがあります...

お役に立てれば!

于 2013-03-14T13:05:38.303 に答える
1

そのためのライブラリを使用できます。これが私のお気に入りの1つです:http://dynamite.codeplex.com/

于 2013-03-14T13:08:36.760 に答える