- 增加 IQueryable RestoreToSelect 扩展方法,将 IQueryable 转回成 ISelect<T>;

This commit is contained in:
28810
2020-04-10 22:37:42 +08:00
parent 52fbe5ed86
commit 5e531b2521
10 changed files with 266 additions and 253 deletions

View File

@ -15,14 +15,27 @@ public static class FreeSqlExtensionsLinqSql
/// <summary>
/// 将 ISelect&lt;T1&gt; 转换为 IQueryable&lt;T1&gt;<para></para>
/// 此方法主要用于扩展,比abp IRepository GetAll() 接口方法需要返回 IQueryable 对象<para></para>
/// 注意IQueryable 方法污染较为严重,请尽量避免此转换
/// 用于扩展如abp IRepository GetAll() 接口方法需要返回 IQueryable 对象<para></para>
/// 提示IQueryable 方法污染严重,查询功能的实现也不理想,应尽量避免此转换<para></para>
/// IQueryable&lt;T1&gt; 扩展方法 RestoreToSelect() 可以还原为 ISelect&lt;T1&gt;
/// </summary>
/// <returns></returns>
public static IQueryable<T1> AsQueryable<T1>(this ISelect<T1> that) where T1 : class
{
return new QueryableProvider<T1, T1>(that as Select1Provider<T1>);
}
/// <summary>
/// 将 IQueryable&lt;T1&gt; 转换为 ISelect&lt;T1&gt;<para></para>
/// 前提IQueryable 必须由 FreeSql.Extensions.Linq.QueryableProvider 实现
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <param name="that"></param>
/// <returns></returns>
public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class
{
var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception($"无法将 IQueryable<{typeof(T1).Name}> 转换为 ISelect<{typeof(T1).Name}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider");
return queryable._select;
}
/// <summary>
/// 【linq to sql】专用扩展方法不建议直接使用