在Entity Framework Core中,使用C#6,有以下3种方法:
public static class EntityFrameworkQueryableExtensions {
public static IIncludableQueryable<TEntity, TProperty> Include<TEntity, TProperty>([NotNullAttribute] this IQueryable<TEntity> source, [NotNullAttribute] Expression<Func<TEntity, TProperty>> navigationPropertyPath) where TEntity : class;
public static IIncludableQueryable<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>([NotNullAttribute] this IIncludableQueryable<TEntity, ICollection<TPreviousProperty>> source, [NotNullAttribute] Expression<Func<TPreviousProperty, TProperty>> navigationPropertyPath) where TEntity : class;
public static IIncludableQueryable<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>([NotNullAttribute] this IIncludableQueryable<TEntity, TPreviousProperty> source, [NotNullAttribute] Expression<Func<TPreviousProperty, TProperty>> navigationPropertyPath) where TEntity : class;
}
我需要使用泛型调用这些方法。对于Include我正在做这样的事情:
MethodInfo _include =
typeof(EntityFrameworkQueryableExtensions)
.GetTypeInfo()
.GetDeclaredMethods(nameof(EntityFrameworkQueryableExtensions.Include))
.Single(x => x.GetParameters().Select(y => y.ParameterType.GetGenericTypeDefinition())
.SequenceEqual(new[] { typeof(IQueryable<>), typeof(Expression<>) }));
我的问题是如何区分2个ThenInclude方法。人们只有一个区别:
IIncludableQueryable<TEntity, ICollection<TPreviousProperty>>
另一个
IIncludableQueryable<TEntity, TPreviousProperty>
顺便说一句,如果有人知道简化我的代码的方法,请告诉我。