C # retrieve où clause sur linq
Question
Existe-t-il un moyen de créer une requête linq afin de l'utiliser ultérieurement ou de l'afficher / l'imprimer (et plus précisément, la clause where)?
La solution
Qu'est-ce que vous voulez exactement? Vous pouvez capturer uniquement la expression à partir de Where
- quelque chose comme:
Expression<Func<SomeType, bool>> predicate = row => row.IsActive
&& row.Color == "red";
Parce que cela va dans un arbre d'expression, il y a un sens ToString()
.
Si vous voulez le code SQL (etc.), cela dépend de la mise en oeuvre. Par exemple, avec LINQ-to-SQL, vous pouvez utiliser .Log
- par exemple, ctx.Log = Console.Out;
Si vous voulez que le prédicat sorte du milieu d'un IQueryable<T>
flux, c'est beaucoup plus compliqué ...
Autres conseils
LINQ n'est-il pas une fonctionnalité .NET 3.5?
modifier:
http://msdn.microsoft.com/en-us/library /bb332048.aspx
- > LINQ est uniquement disponible à partir de .NET 3.5, donc pas 3.0 comme le demande le sujet.
edit2:
Ok, le TS parle de C # 3.0, qui vient avec .NET 3.5.
Très déroutant.
Vous pouvez regarder System.Linq.Dynamic c'est un addon à linq pour créer dynamique où, ordre, etc.
Par exemple, tblProduct.Where (" product_id = @ 0 " ;, product_id)
Cela pourrait être utile.
Regardez cet exemple à partir de MSDN:
// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));
// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));
Linq ne peut pas être affiché (autant que je sache), si vous voulez dire une requête 'linq2sql' (requête qg. sql construite à partir de linq), non, elle ne peut pas être imprimée.