2012-10-10 14 views
5

JQgrid用のWebサービスを使用してカスタム列名を持つカスタム要素を検索する実装を試行していますが、私は考えていません。リストからカスタム列の要素を選択する

私はここに私のコードをコピーすることはできませんが、例えば、私のような実体を持っている:

public class Test 
{ 
    public int ID {get; set;} 
    public string Name {get; set;} 
    public string Nationality {get; set;} 
} 

と、私はこのクラスのリストを返す関数を作成:

public static List <Test> getList() 
{ 
    List<Test> testList = new List<Test>(); 
    Test testList1 = new Test(); 

    testList1.ID = 123; 
    testList1.Name = "asd"; 
    testList1.Nationality = "qwe"; 

    testList.Add(testList1); 
    return testList; 
} 

クエリ文字列からsearchFieldとsearchStringを取得すると、これらの値をsearchFieldとsearchStringの文字列に格納しています。

私は、この関数(私はその間違ったを知っているが、私はその機能が必要)に似て動作するように何かをしたい:私はリストか何かを得るには問題がないが、私はちょうどこれに似た何かをしたい

list=testList.Where(x=>x.searchField.Contains(searchString)); 

を。

答えて

3

あなたはReflectionを使用することができます。

list = testList.Where(x => (x.GetType() 
       .GetProperty(searchField) 
       .GetValue(x) as string).Contains(searchString)  
    ); 
+0

お返事をありがとう、それは以降.getvalue(言う)1つの引数を取るオーバーロードメソッドがありません... OmarAs'hab @ –

+0

:あなたは、.NETフレームワークを使用していますか? –

+1

@ OmarAs'hab:.Net 4.0を使用する場合、GetValue(x、null)を使用することができます –

3

次のようにそれを実装することができます。

if(searchField == "ID") 
{ 
    testList = testList.Where(x => x.ID == searchString); 
} 
else if (searchField == "Name") 
{ 
    testList = testList.Where(x => x.Name.Contains(searchString); 
} 
else if (searchField == "Nationality") 
{ 
    testList = testList.Where(x => x.Nationality.Contains(searchString); 
} 
+0

これはうまくいくはずですが、問題はクラスで使用する属性が非常に多く、ほかにもたくさんのクラスがありますので、簡単で素早い方法が必要でした。 –

関連する問題