【问题标题】:how to check if IQueryable<T>.ElementType is Iterface如何检查 IQueryable<T>.Element 类型是否为接口
【发布时间】:2016-10-15 00:14:46
【问题描述】:

我的(EF db first)类型位于接口IPolicyNumber 后面。我得到IQueryable&lt;T&gt; 并想检查我得到的类型是否正确(该表是否可以通过具有该接口确定的列进行搜索)。目前我正在使用typeof(IPolicyNumber).IsAssignableFrom(typeof(T)),这有点老派,我想知道是否有办法使用类似的东西:

IQueryable&lt;T&gt;.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&lt;T&gt;.ElementType is IPolicyNumber 询问 Type 对象(RuntimeTypeInfo,最有可能)是否实现 IPolicyNumber,它永远不会实现
  • @MarcGravell 嗨,马克,有没有办法IQueryable&lt;T&gt;.ElementType something something(IPolicyNumber) 会返回 true? :)
  • @MarcGravell 所以IQueryable&lt;T&gt;.ElementType 非常没用,然后检查继承不是吗?
  • 不是真的,不;它应该可以正常工作

标签: c# generics reflection types iqueryable


【解决方案1】:

使用IQueryable&lt;T&gt;.ElementType 时将接口与类型匹配的语法如下:

typeof(IPolicyNumber).IsAssignableFrom(queryable.ElementType)

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 2016-05-01
    • 1970-01-01
    • 2016-10-12
    • 2015-06-25
    • 2014-08-20
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多