C # извлекает предложение where в linq
Вопрос
Есть ли способ создать запрос linq, чтобы использовать его позже или отобразить / распечатать его (и, более конкретно, предложение where)?
Решение
Что именно вы хотите? Вы можете захватить только выражение из Where
- что-то вроде:
Expression<Func<SomeType, bool>> predicate = row => row.IsActive
&& row.Color == "red";
Поскольку это происходит в дереве выражений, существует значимое ToString()
.
Если вам нужен SQL (и т. д.), это будет зависеть от реализации. Например, с LINQ-to-SQL вы можете использовать .Log
- например, ctx.Log = Console.Out;
Если вы хотите, чтобы предикат находился в середине канала IQueryable<T>
, то это гораздо сложнее ...
Другие советы
Разве LINQ не является функцией .NET 3.5?
Редактировать:
http://msdn.microsoft.com/en-us/library/bb332048.aspx
--> LINQ доступен только с .NET 3.5, поэтому не 3.0, как просит topicstarter.
редактировать 2:
Итак, в TS говорится о C # 3.0, который поставляется вместе с .NET 3.5.
Довольно запутанный.
Вы можете взглянуть на System.Linq.Dynamic, это дополнение к linq для построения динамических где, orderby и т. д.
например, tblProduct.Where (" product_id = @ 0 " ;, product_id)
Это может оказать некоторую помощь.
Посмотрите на этот пример из 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 не может быть отображен (AFAIK), если вы имеете в виду запрос 'linq2sql' (qg. SQL-запрос, построенный из linq), нет, он не может быть распечатан.