packages/System.Linq.Dynamic.Core.1.0.7.13/src/System.Linq.Dynamic.Core/Extensions/LinqProviderExtensions.cs
(完整代码) 1KBusing System.Reflection;
using JetBrains.Annotations;
using System.Linq.Dynamic.Core.Validation;
namespace System.Linq.Dynamic.Core.Extensions
{
internal static class LinqProviderExtensions
{
/// <summary>
/// Check if the Provider from IQueryable is a LinqToObjects provider.
/// </summary>
/// <param name="source">The IQueryable</param>
/// <returns>true if provider is LinqToObjects, else false</returns>
public static bool IsLinqToObjects([NotNull] this IQueryable source)
{
Check.NotNull(source, nameof(source));
Check.NotNull(source.Provider, nameof(source.Provider));
return IsProviderEnumerableQuery(source.Provider);
}
private static bool IsProviderEnumerableQuery(IQueryProvider provider)
{
Type baseType = provider.GetType().GetTypeInfo().BaseType;
#if NET35
bool isLinqToObjects = baseType.FullName.Contains("EnumerableQuery");
#else
bool isLinqToObjects = baseType == typeof(EnumerableQuery);
#endif
if (!isLinqToObjects)
{
// add support for https://github.com/StefH/QueryInterceptor.Core, version 1.0.1 and up
if (baseType.Name == "QueryTranslatorProvider")
{
try
{
PropertyInfo property = baseType.GetProperty("OriginalProvider");
IQueryProvider originalProvider = property.GetValue(provider, null) as IQueryProvider;
return originalProvider != null && IsProviderEnumerableQuery(originalProvider);
}
catch
{
return false;
}
}
}
return isLinqToObjects;
}
}
}
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
