Comment utiliser la fonction ISJSON du serveur sql dans la requête linq C# EF6 Database first

J'ai besoin de récupérer des données à partir d'une table stockée dans le serveur SQL, cette table a une colonne de chaîne json, puis j'ai besoin de récupérer uniquement les lignes avec une colonne json valide en utilisant linq en C# comme ça:

var q = from t1 in DBContext.table1 join 
t2 in DBContext.table2 on t1.id equals t2.tId
where
//Here what i need to use isJson like that but SqlFunctions does not contain it
SqlFunctions.IsJson(t1.jsonTxt)
select new resDTO
{
name=t1.name,
details =t2.details
}



Solution du problème

Si je comprends bien, vous voulez simplement vérifier une chaîne Json valide dans votre clause where. Dans ce cas tu peux le faire je crois.

var q = from t1 in DBContext.table1 join 
t2 in DBContext.table2 on t1.id equals t2.tId
where
IsValidJson(t1.jsonTxt) == true
select new resDTO
{
name=t1.name,
details =t2.details
}
private bool IsValidJson(string strInput)
{
if (string.IsNullOrWhiteSpace(strInput)) { return false;}
strInput = strInput.Trim();
if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
(strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
{
try
{
var obj = JToken.Parse(strInput);
return true;
}
catch (Exception)
{
return false;
}
}
else
{
return false;
}
}

La méthode provient de ce fil:
Comment s'assurer que la chaîne est valide JSON en utilisant JSON.NET

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"