如何检查 IQueryable<T>.Element Type 是否为 Interface
how to check if IQueryable<T>.ElementType is Iterface
我的(EF 数据库优先)类型位于接口 IPolicyNumber
后面。我得到 IQueryable<T>
并想检查我得到的是正确的类型(这个 table 是否可以通过具有该接口的那一列进行搜索)。目前我正在使用 typeof(IPolicyNumber).IsAssignableFrom(typeof(T))
有点老派,我想知道是否有办法使用类似的东西:
IQueryable<T>.ElementType is IPolicyNumber
完整方法如下:
public static IQueryable<T> ApplySearch<T>(this IQueryable<T> queryable, SearchModel search) where T : class
{
if (search != null && search.PolicyNumber.HasValue && typeof(IPolicyNumber).IsAssignableFrom(typeof(T)))
{
queryable = queryable.SearchByPolicyNumber(search);
}
return queryable;
}
public static IQueryable<IPolicyNumber> SearchByPolicyNumber<IPolicyNumber>(this IQueryable<IPolicyNumber> queryable, SearchModel search)
{
var policyNumberParameterLambda = Expression.Parameter((typeof(IPolicyNumber)));
var policyNumberColumnLambda = Expression.Property(policyNumberParameterLambda, "POLICY_NO");
var lambda = Expression.Lambda<Func<IPolicyNumber, bool>>(
Expression.Equal(policyNumberColumnLambda,
Expression.Convert(Expression.Constant(search.PolicyNumber), policyNumberColumnLambda.Type)
), policyNumberParameterLambda);
return queryable.Where(lambda);
}
使用 IQueryable<T>.ElementType
时将接口与类型匹配的语法如下:
typeof(IPolicyNumber).IsAssignableFrom(queryable.ElementType)
我的(EF 数据库优先)类型位于接口 IPolicyNumber
后面。我得到 IQueryable<T>
并想检查我得到的是正确的类型(这个 table 是否可以通过具有该接口的那一列进行搜索)。目前我正在使用 typeof(IPolicyNumber).IsAssignableFrom(typeof(T))
有点老派,我想知道是否有办法使用类似的东西:
IQueryable<T>.ElementType is IPolicyNumber
完整方法如下:
public static IQueryable<T> ApplySearch<T>(this IQueryable<T> queryable, SearchModel search) where T : class
{
if (search != null && search.PolicyNumber.HasValue && typeof(IPolicyNumber).IsAssignableFrom(typeof(T)))
{
queryable = queryable.SearchByPolicyNumber(search);
}
return queryable;
}
public static IQueryable<IPolicyNumber> SearchByPolicyNumber<IPolicyNumber>(this IQueryable<IPolicyNumber> queryable, SearchModel search)
{
var policyNumberParameterLambda = Expression.Parameter((typeof(IPolicyNumber)));
var policyNumberColumnLambda = Expression.Property(policyNumberParameterLambda, "POLICY_NO");
var lambda = Expression.Lambda<Func<IPolicyNumber, bool>>(
Expression.Equal(policyNumberColumnLambda,
Expression.Convert(Expression.Constant(search.PolicyNumber), policyNumberColumnLambda.Type)
), policyNumberParameterLambda);
return queryable.Where(lambda);
}
使用 IQueryable<T>.ElementType
时将接口与类型匹配的语法如下:
typeof(IPolicyNumber).IsAssignableFrom(queryable.ElementType)