2013-10-24 55 views
1

我有2個表。使用外鍵鏈接到設備表的資產表。我如何獲得使用反射和實體框架字段名的字符串值的外地表字段

要獲得資產的DEVICE_NAME領域,LINQ我會用:

dim device as string = result.device.device_name 

結果對象包含從早期的LINQ到實體框架指令的唯一記錄。

現在我需要允許最終用戶在報告中指定他們想要的字段。我最終將不得不領域的字符串名稱,使用反射

dim name as string = result.GetType().GetProperty("asset_name").GetValue(result) 

這將返回ASSET_NAME場,所以我想偉大的,我應該能夠得到國外相關表中的字段值,以便嘗試。

dim device = result.GetType().GetProperty("device").GetValue(result).GetType.GetProperty("device_name").GetValue(result.device) 

這工作,但我必須指定的對象。因爲我將有其他錶鏈接到第一個表,我將不得不編寫額外的代碼來檢查什麼對象和手動指定?或者我錯誤地進入這個問題?任何幫助和建議表示讚賞。

回答

0

我無法找到一個清晰的解決方案,所以這是我做的:

dim field as string ="device.device_name" 
dim output as string ="" 
dim subtable as string ="" 

If field.Contains(".") Then 
    subtable = field.Substring(0, field.IndexOf(".")) 
    field = field.Substring(field.IndexOf(".") + 1) 
End If 
If subtable <> "" Then 
    Select case subtable 
    Case "device" 
     If Not IsNothing(result.device.GetType().GetProperty(field)) Then 
      output = result.device.GetType().GetProperty(field).GetValue(result.device) 
     End If 
    End Select 
Else 
    If Not IsNothing(result.GetType().GetProperty(field)) Then 
     output= result.GetType().GetProperty(field).GetValue(reult) 
    End If 
End If 
Return output 
相關問題