2012-06-22 30 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 

等等

如何if語句或使用「選擇案例」

回答

0

你不得不使用反射來獲取爲此在優雅的方式,而無需編寫6 PropertyInfo基於選定的字符串。然後在你的LINQ查詢中使用它。去數據庫可能會讓人難過,但是......我不確定沒有嘗試它。你會使用PropertyInfo在LINQ查詢是這樣的:

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 我不知道爲什麼我必須在vb.net中添加AsEnumurable以便工作。非常感謝你的解釋,並且很抱歉,從我那裏花了很長時間纔得到它。 –