C# 如何检查IQueryable<;T>;。ElementType为Iterface
My(EF db first)类型位于接口后面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
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 soIQueryable.ElementType
非常无用,然后检查继承,不是吗?不是真的,不是;它应该很好用