2016-11-26 51 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