2012-10-10 6 views
5

JQgrid 용 webservice를 사용하여 사용자 정의 열 이름으로 목록에서 사용자 정의 요소를 검색하려고합니다. 그러나 이것에 대한 도움이 필요합니다. .목록에서 사용자 정의 열의 요소를 선택하십시오.

내가 예를 들어, 내가 좋아하는 엔티티가 여기 내 코드를 복사 할 수는 없지만

:

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()가 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

고맙지 만 문제는 클래스에서 사용할 속성이 너무 많아서 다른 클래스도 많이 있으므로 간단하고 빠른 방법이 필요했습니다. –

관련 문제