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
Enregistrer un commentaire