csharp IQuerable ToSqlString扩展方法。来自https://www.stevefenton.co.uk/2015/07/getting-the-sql-query-from-
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp IQuerable ToSqlString扩展方法。来自https://www.stevefenton.co.uk/2015/07/getting-the-sql-query-from-相关的知识,希望对你有一定的参考价值。
using System;
using System.Data.Entity.Core.Objects;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace Fenton.Example
{
public static class IQueryableExtensions
{
/// <summary>
/// For an Entity Framework IQueryable, returns the SQL with inlined Parameters.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="query"></param>
/// <returns></returns>
public static string ToTraceQuery<T>(this IQueryable<T> query)
{
ObjectQuery<T> objectQuery = GetQueryFromQueryable(query);
var result = objectQuery.ToTraceString();
foreach (var parameter in objectQuery.Parameters)
{
var name = "@" + parameter.Name;
var value = "'" + parameter.Value.ToString() + "'";
result = result.Replace(name, value);
}
return result;
}
/// <summary>
/// For an Entity Framework IQueryable, returns the SQL and Parameters.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="query"></param>
/// <returns></returns>
public static string ToTraceString<T>(this IQueryable<T> query)
{
ObjectQuery<T> objectQuery = GetQueryFromQueryable(query);
var traceString = new StringBuilder();
traceString.AppendLine(objectQuery.ToTraceString());
traceString.AppendLine();
foreach (var parameter in objectQuery.Parameters)
{
traceString.AppendLine(parameter.Name + " [" + parameter.ParameterType.FullName + "] = " + parameter.Value);
}
return traceString.ToString();
}
private static System.Data.Entity.Core.Objects.ObjectQuery<T> GetQueryFromQueryable<T>(IQueryable<T> query)
{
var internalQueryField = query.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Where(f => f.Name.Equals("_internalQuery")).FirstOrDefault();
var internalQuery = internalQueryField.GetValue(query);
var objectQueryField = internalQuery.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Where(f => f.Name.Equals("_objectQuery")).FirstOrDefault();
return objectQueryField.GetValue(internalQuery) as System.Data.Entity.Core.Objects.ObjectQuery<T>;
}
}
}
以上是关于csharp IQuerable ToSqlString扩展方法。来自https://www.stevefenton.co.uk/2015/07/getting-the-sql-query-from-的主要内容,如果未能解决你的问题,请参考以下文章
实现动态排序
IQueryableIEnumberable IList与List区别
WebAPI 2.2 不支持 substringof 函数
EF急切加载和延迟加载的区别?
csharp 实例-CSHARP-GroupDocs.Conversion.Examples.CSharp变频-ConvertWithCustomInputDataHandler.cs
csharp 例如-CSHARP-GroupDocs.Conversion.Examples.CSharp - 程序 - ConvertFilesToDifferentFormats.cs