2016-11-26 49 views
1

在表中,Leads包含一個包含JSON字符串的列Data。在LINQ的語句,我需要從JSON提取場:LINQ需要從列中解析JSON

var results = from l in leads 
    select new MyLeadObject 
    { 
     LeadID = l.LeadID, 
     ... 
     RequestType = (string)l.Data["RequestTypeID"] 
    }; 

這裏是JSON的一個縮短的版本:

{ 
    "RequestTypeID":1 
} 

RequestTypeID是一個字符串。

我一直在閱讀其他線程,並試圖拼湊在一起。沒有多少運氣。

編輯:

與恩科西的幫助下,我能走到今天:

RequestType = (string)JSONNetSerialization.DeserializeJsonNet<LeadData>(l.Data).RequestTypeID 

唯一的問題是,LeadData.RequestTypeID是一個枚舉,所以不會枚舉轉換一個字符串。我不知道如何獲得枚舉的價值,而不是整個枚舉本身。在LINQ之外,我可以這樣做:RequestTypeID.GetDisplayName();但是.GetDisplayName()不被LINQ識別。

+0

您可以使用JSON.Net來解析數據字段以獲取屬性。但是查詢需要首先實現,因爲linq to sql會大吵大鬧 – Nkosi

+0

我不確定我遵循 – user1418704

+0

是'leads'直接調用表還是已經在內存中 – Nkosi

回答

1

您可以使用Json.Net解析Data字段中的JSON以獲取該屬性。

var results = leads.Select(l => 
    new MyLeadObject { 
     LeadID = l.LeadID, 
     //... 
     RequestType = (string)JsonConvert.DeserializeObject(l.Data)["RequestTypeID"] 
    }); 
+0

好的謝謝!我要測試一下。非常感激! – user1418704

+0

我得到:表達式樹可能不包含動態操作 – user1418704

+0

我有一個實際的對象,我可以使用,而不是'dynamic'。但是由於RequestTypeID是enum – user1418704