2012-05-02 14 views
3

可能性の重複などの文字列を使用して:
LINQ: orderby with dynamic string parameterLINQクエリの属性

私はのOrderBy()句でIEnumarableをソートしています。私は注文したいフィールドを含む値の文字列を持つリストです。今私は各プロパティ名のswitch文を使用しています。

orderby句の属性として「propertyname」という文字列を使用する簡単な方法はありますか?

私がやったように、私はそれほど望ましい解決法を得ていません。それぞれのプロパティをコーディングするだけでなく、今後この属性を追加すると、私が書いている関数でこのアップデートを忘れることになります。

誰かがより良い解決策を得たいと願っています。述語を説明する

答えて

2
var list = new List<MyClass>(); 

// Gets an object to give us access to the property with the given name of type MyClass 
var propertyInfo = typeof(MyClass).GetProperty(propertyName); 

// Each item is ordered by the value of the property 
list = list.OrderBy(x => propertyInfo.GetValue(x, null)).ToList(); 

var xPropVal = propertyInfo.GetValue(x, null); 

をプロパティ情報オブジェクトを使用して、ヌルパラメータで、オブジェクトxの値を取得します。 このパラメータはインデクサに使用されます。これはプロパティインフォオブジェクトです。

しかし、この場合のプロパティはすべて単純なプロパティなので、2番目のパラメータはnullまたは空のオブジェクト配列にする必要があります。

+0

をしかし、それはPropertyNameはより多くのバリエーションを持っているかどうだろうか? – Likurg

+0

これは尋ねられていることではありません。文字列はプロパティの名前であり、2以上の数が存在する可能性があります。 – yamen

+0

この質問は、3つ以上のプロパティがあることを意味します。最後に点を書き留めます。 – Stilgar

1

これを行う最も簡単な方法は、Microsoftが提供するDynamic Linqのサンプルを見ることです。スコット・ガスリーは、ここでそれについてのブログ記事があります。http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

ザ・あなたは、単にこれを行うことができます:

string propertyname = ... 
list.OrderBy(propertyname).ToList(); 
+0

あなたは@ダッシュのコメントを見ますか? – Likurg

+0

ええ、私は彼に同意しますが、私はすでに時間が来るまでに自分の投稿を書いていました:) – samjudson