Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查IQueryable<;T>;。ElementType为Iterface_C#_Generics_Reflection_Types_Iqueryable - Fatal编程技术网

C# 如何检查IQueryable<;T>;。ElementType为Iterface

C# 如何检查IQueryable<;T>;。ElementType为Iterface,c#,generics,reflection,types,iqueryable,C#,Generics,Reflection,Types,Iqueryable,My(EF db first)类型位于接口后面IPolicyNumber。我得到了IQueryable,想检查我得到的是正确的类型(这个表是否可以通过该接口确定的列进行搜索)。目前我使用的是typeof(IPolicyNumber)。IsAssignableFrom(typeof(T))这有点老派,我想知道是否有办法使用以下内容: IQueryable.element类型为IPolicyNumber 完整方法如下: public static IQueryable<T> ApplyS

My(EF db first)类型位于接口后面
IPolicyNumber
。我得到了
IQueryable
,想检查我得到的是正确的类型(这个表是否可以通过该接口确定的列进行搜索)。目前我使用的是
typeof(IPolicyNumber)。IsAssignableFrom(typeof(T))
这有点老派,我想知道是否有办法使用以下内容:

IQueryable.element类型为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 ApplySearch(此IQueryable可查询,SearchModel搜索),其中T:class
{
if(search!=null&&search.PolicyNumber.HasValue&&typeof(IPolicyNumber).IsAssignableFrom(typeof(T)))
{
queryable=queryable.SearchByPolicyNumber(搜索);
}
返回可查询;
}
公共静态IQueryable SearchByPolicyNumber(此IQueryable可查询,SearchModel搜索)
{
var policyNumberParameterLambda=Expression.Parameter((typeof(IPolicyNumber));
var policyNumberColumnLambda=Expression.Property(policyNumberParameterLambda,“POLICY_NO”);
var lambda=表达式.lambda(
表达式.Equal(policyNumberColumnLambda,
Expression.Convert(Expression.Constant(search.PolicyNumber),policyNumberColumnLambda.Type)
),保单编号参数λ);
返回可查询的位置(λ);
}

使用
IQueryable时将接口与类型匹配的语法。ElementType
如下所示:


typeof(IPolicyNumber).IsAssignableFrom(queryable.ElementType)

基本上没有
IQueryable.ElementType为IPolicyNumber
询问
Type
对象(
RuntimeTypeInfo
,最有可能)是否实现了它从未实现过的
IPolicyNumber
will@MarcGravell你好,马克,有没有办法
IQueryable.element键入一些返回true的内容(IPolicyNumber)
绝对是@MarcGravell so
IQueryable.ElementType
非常无用,然后检查继承,不是吗?不是真的,不是;它应该很好用