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

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables