2011-06-17 107 views
0

LINQ新手在這裏LINQ查詢結果 - 動態獲取字段名稱變量的字段值

我想獲取字段的值 - 使用fieldName變量。 如果我在行[FieldName]上做了一個監視,我確實得到了一個值 - 但是當我在實際的代碼上執行它時,它將無法編譯。

string fieldName = "awx_name" 

List<awx_property> propertyQry = 
      (
       from property in crm.awx_propertyawx_properties 
       where property.awx_propertyid == new Guid(id) 
       select property 
      ).ToList(); 

      foreach (awx_property row in propertyQry) 
      { 
//THIS DOES NOT WORK 
fieldValue = row[fieldName]; 
} 

在此先感謝。替代品也會受到歡迎

回答

1

你讓我們猜你在這裏做什麼......你需要指定對象的類型,所以我們很容易理解和幫助。無論如何,我認爲你正試圖獲得一個基於ID的對象。既然你是通過Id獲得的,我的猜測將是返回值是一個單一的對象。

var propertyObj =(from property in crm.awx_propertyawx_properties 
         where property.awx_propertyid == new Guid(id) 
         select property 
        ).SingleOrDefault(); 
    if(propertyObj != null) { 
    fieldValue = propertyObj.GetType().GetProperty(fieldName).GetValue(propertyObj, null); 
    } 

當然,您需要添加驗證以確保在訪問屬性值時不會出現空值或任何其他錯誤。

希望它有幫助。

+0

這可行!我很抱歉不太清楚 - 謝謝! – DevilCode

0

什麼類型是fieldValue? awx_property是什麼樣的?這隻會工作是awx_property是一個鍵/值集合。它不是,你可以用反射來代替。

如果它是一個鍵/值集合,您可能錯過了演員陣容。 (行[FieldName] .ToString()或者其他)你也在foreach塊中缺少一個分號。

+0

如果我做row.awx_name它工作正常。也許我應該檢查出反射處理... – DevilCode

+0

由於其保護級別,Microsoft.Xrm.Client.CrmEntity.this [string]'無法訪問\t ==>這是我得到的編譯錯誤 – DevilCode