2012-06-22 3 views
0

6 개의 텍스트 NA,PO,FA,GO,VG,EX이있는 콤보가 있는데 where 절의 필드로 사용되는이 콤보에서 선택한 값에 대해 Linq 쿼리를 수행하려고합니다. 예를 들어 :콤보 텍스트에 의한 linq where 절의 대체 필드 이름

'if "NA" is selected : 
Dim query = from t in db.table where t.NA > 0 Select t 
'If "PO" is selected : 
Dim query = from t in db.table where t.PO > 0 select t 

등 ...

문이나은을 얻기 위해 반사를 사용 "을 선택하는 경우"

답변

0

을 당신이 한 것 사용하는 경우 (6)을 작성하지 않고 우아한 방법으로이 작업을 수행하는 방법 PropertyInfo (선택한 문자열 기준). 그런 다음 LINQ 쿼리에서 사용하십시오. 데이터베이스로 가면 슬픈 일 이겠지만 ... 시도하지 않고 잘 모르겠습니다. 당신이처럼 LINQ 쿼리에 PropertyInfo을 사용하십시오 :

Dim selectedPropertyInfo = db.table.GetType().GetProperties().FirstOrDefault(p => p.Name == "NA") 

Dim query = from t in db.table 
      where selectedPropertyInfo.GetValue(t, null) > 0 
      select t; 
+0

죄송합니다, 나는 당신의 솔루션을 이해 할 수없는 생각하지, 나도 문자열 필드 이름을 대체 할 PropertyInfo.GetValue을 사용하는 방법의 예를 발견했다. 연결하도록 안내 할 수 있습니까? –

+0

'PropertyInfo'를 얻는 방법을 보여줄 라인을 추가했습니다. 당신이 반성을 잘 이해하지 못한다면, 아마도 나의 해결책은별로 도움이되지 않을 것입니다. – bluevector

+0

아이디어와 개념이 정확합니다. C#의 구문도 정확합니다 (테스트하지 않았습니다). 그러나 vb.net의 구문은 약간 다릅니다. 마지막으로 저는 아이디어를 작동하는 vb.net 코드로 변환했습니다. Dim field_name = "NA" dim query = from db.table.AsEnumurable.where (function (f) f.gettype.getproperty (field_name)). GetValue (f, nothing)> 0) select t 왜 AsEnumurable을 vb.net에 추가해야 작동하는지 알 수 없습니다. 귀하의 설명에 많은 시간을 가져 주셔서 감사 드리며 오랜 시간이 걸려서 미안합니다. –