C # recupera la clausola where su linq
Domanda
C'è un modo per creare una query linq per usarla in un secondo momento o per visualizzarla / stamparla (e più specificamente, la clausola where)?
Soluzione
Che cosa vuoi esattamente? Puoi catturare solo l ' espressione da Where
- qualcosa del tipo:
Expression<Func<SomeType, bool>> predicate = row => row.IsActive
&& row.Color == "red";
Poiché questo sta andando a un albero delle espressioni, c'è un ToString()
.
Se si desidera l'SQL (ecc.), sarà specifico per l'implementazione. Ad esempio, con LINQ-to-SQL è possibile utilizzare .Log
, ad esempio ctx.Log = Console.Out;
Se vuoi il predicato nel mezzo di un IQueryable<T>
feed, allora è molto più complicato ...
Altri suggerimenti
LINQ non è una funzionalità di .NET 3.5?
modifica
http://msdn.microsoft.com/en-us/library /bb332048.aspx
- GT &; LINQ è disponibile solo da .NET 3.5, quindi non 3.0 come richiesto dall'argomento.
EDIT2:
Ok, quindi il TS parla di C # 3.0, che viene fornito con .NET 3.5.
Abbastanza confuso.
Potresti dare un'occhiata a System.Linq.Dynamic è un componente aggiuntivo di linq per creare dinamica dove, ordine ecc.
es. tblProduct.Where (" product_id = @ 0 " ;, product_id)
Potrebbe essere di aiuto.
Guarda questo esempio da 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 non può essere visualizzato (AFAIK), se si intende una query 'linq2sql' (qg. query sql creata da linq), no, non può essere stampata.