Générer une clause SQL à l'aide d'une expression Linq-to-Sql

c# dapper linq-to-sql

Question

J'aimerais créer un modèle de référentiel pouvant prendre une expression et utiliser Linq-To-Sql pour générer l'instruction SQL requise.

Par exemple, j'ai une fonction comme celle-ci:

// Possible criteria
Expression<Func<Purchase,bool>> criteria1 = p => p.Price > 1000;

// Function that should take that criteria and convert to SQL statement
static IEnumerable<Customer> GetCustomers (Expression<Func<Purchase,bool>> criteria)
{
   // ...
}

Dans la fonction, je voudrais convertir des critères en une instruction SQL en utilisant Linq-To-Sql.

Je sais que vous pouvez utiliser DataContext.Log pour voir les requêtes exécutées et DataContext.GetCommand(query).CommandText pour voir la requête complète avant son exécution. Cependant, je voudrais juste une partie de l'expression entière générée.

Ce que j'espère accomplir est de rendre mon référentiel abstrait de la technologie sous-jacente (Linq-to-Sql, Dapper, etc.). De cette façon, je pourrais transmettre l’expression au référentiel, le faire générer la bonne déclaration et utiliser la bonne technologie pour l’exécuter.

Réponse acceptée

Vous pourriez faire quelque chose comme ça:

string sql = DataContext.GetTable<Customer>().Where(criteria).ToString();

ToString () vous donne l'expression SQL. Vous pouvez ensuite utiliser regex pour extraire la clause WHERE.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi