2011-11-28 65 views
2

我正在尋找試圖使用Linq查詢來確定如果以下JSON爲真,如果它包含SKU爲12345或TypeCode爲「C」的產品。JSON LInq查詢

"[{\"SKU\":\"12345\",\"Description\":\"Test Part 12345\",\"TypeCode\":\"A\",\"Cost\":24.99},{\"SKU\":\"54567\",\"Description\":\"Test Part 54567\",\"TypeCode\":\"B\",\"Cost\":9.99},{\"SKU\":\"QWZ2342\",\"Description\":\"Test Part QWZ2342\",\"TypeCode\":\"C\",\"Cost\":19.99}]" 

我一直在努力與Json.net(http://james.newtonking.com/projects/json-net.aspx)

回答

2

首先,您必須將反序列化JSON成C#對象,讓我們說產品。

class Product 
{ 
    public int SKU { get; set; } 
    public string Desc { get; set; } 
    public string TypeCode { get; set; } 
    public decimal Cost { get; set; } 
} 

然後使用.NET的JavaScriptSerializer(System.Web.Script.Serialization),轉換成JSON字符串,成爲您的自定義對象的列表。

string json = "[{\"SKU\":\"12345\",\"Description\":\"Test Part 12345\",\"TypeCode\":\"A\",\"Cost\":24.99},{\"SKU\":\"54567\",\"Description\":\"Test Part 54567\",\"TypeCode\":\"B\",\"Cost\":9.99},{\"SKU\":\"QWZ2342\",\"Description\":\"Test Part QWZ2342\",\"TypeCode\":\"C\",\"Cost\":19.99}]" 

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
List<Product> productList = new List<Product>(); 
productList = jsonSerializer.Deserialize<List<Product>>(json); 

的最後一個步驟,使用簡單的LINQ查詢,你不能檢查您的產品是否在名單上有:

var Found = from o in productList 
        where o.SKU == 12345 
        select o.SKU; 
if (Found.Count() > 0) 
    return true; 
else 
    return false; 
+0

當我運行LINQ查詢我取回所有的結果,而不是什麼過濾由where語句。我的清單包含80項。當我添加一個where子句並指定一個不存在的值(例如o.SKU ==「ZZZZZ」)時,我仍然得到一個var Found,它不是null,計數是80個項目。 – econner

+0

我注意到Sourc count = 80,但如果查詢的條件不成立,則Results View爲空。但是,即使結果視圖爲空,檢查Found!= null是否仍然返回true。確定查詢是否返回任何結果的最佳方法是什麼? – econner

+1

好吧,我想我有。我使用Count()方法,如int count = Found.Count(); – econner