关于c#:如何检查IQueryable<> .Element Type是否为Interface

how to check if IQueryable<T>.ElementType is Iterface

我的(ef-db-first)类型位于接口IPolicyNumber后面。我得到了IQueryable并想检查我得到的是正确的类型(这个表是否可以通过该列进行搜索,该列由该接口决定)。目前我使用的是typeof(IPolicyNumber).IsAssignableFrom(typeof(T)),这是一个有点古老的学校,我想知道是否有一种方法可以使用类似:

埃多克斯1〔3〕

完整方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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.ElementType时将接口与类型匹配的语法如下:

江户十一〔一〕号