2011-11-28 3 views
2

Je cherche à utiliser une requête Linq pour déterminer si le JSON suivant est vrai s'il contient un produit qui a un SKU de 12345 OU un TypeCode de "C".JSON LInq Query

"[{\"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}]" 

Je travaille avec le Json.net (http://james.newtonking.com/projects/json-net.aspx)

Répondre

2

Tout d'abord, vous devez désérialiser le JSON dans un Objet C#, disons Produit.

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

puis, à l'aide de .NET JavaScriptSerializer (de System.Web.Script.Serialization), convertir la chaîne JSON pour devenir Liste de vos objets personnalisés.

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); 

la dernière étape, en utilisant simple requête LINQ, vous ne pouvez pas vérifier si votre produit existe sur la liste:

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

Quand je lance la requête LINQ Je reviens tous les résultats et non ce qui est filtré par la déclaration where. Ma liste contient 80 éléments. Lorsque j'ajoute une clause where et spécifie une valeur qui n'existe pas (comme o.SKU == "ZZZZZ"), je reçois toujours une variable var qui n'est pas nulle et le nombre est de 80 éléments. – econner

+0

J'ai remarqué le nombre de Sourc = 80 mais la vue des résultats est vide si la requête où la condition n'est pas vraie. Cependant, vérifier si Found! = Null retourne true même si la vue Result est vide. Quelle pourrait être la meilleure façon de déterminer si la requête a renvoyé des résultats? – econner

+1

Ok, je pense que je l'ai. J'utilise la méthode Count() comme int count = Found.Count(); – econner