如何检查IQueryable <t> .ElementType是否为Iterface

时间:2016-06-14 10:09:31

标签: c# generics reflection types iqueryable

我的(EF db first)类型位于接口IPolicyNumber后面。我得到IQueryable<T>并且想要检查我得到的是正确的类型(该表是否可由该列搜索,该列由具有该接口确定)。目前我正在使用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);
    }

1 个答案:

答案 0 :(得分:1)

使用IQueryable<T>.ElementType时将接口与类型匹配的语法如下:

typeof(IPolicyNumber).IsAssignableFrom(queryable.ElementType)

相关问题