为什么有通用的IQueryable
?你可以提供一个用途吗?
出于同样的原因,非通用ElementType
接口的IQueryable
成员是否多余?
引入仿制药后,引入了两个IQueryable
接口。因此,同源版本和非泛型版本看起来不像IEnumerable
及其通用版本那样是一种进化过程。
当然,微软必须有充分的理由保留这两个接口吗?
答案 0 :(得分:0)
此界面的主要目的是允许访问ElementType
,Expression
和Provider
,而无需了解通用类型。
在编写Generic Types时,这是Microsoft的一种相当普遍的做法。 List<T>
继承自IList<T>
继承的IList
。
换句话说,您希望以非泛型方式公开任何不需要泛型类型的属性。在IQueryable<T>
的情况下,没有暴露属性。但是,泛型类型T
允许使用System.Linq.Queryable
中的强类型扩展方法。
请注意以下事项:
void Main()
{
var lst = new List<string>();
lst.Add("test1");
lst.Add("test2");
lst.Add("test3");
IQueryable<string> q = lst.AsQueryable();
PrintQueryInfo( q.Where(x=>x.Contains('1')));
}
public void PrintQueryInfo(IQueryable q){
Console.WriteLine(q.Expression.ToString());
}
输出:
System.Collections.Generic.List`1[System.String].Where(x => x.Contains(1))
还值得注意的是,上述示例也可以使用通用方法完成。但这并不总是可行或实际的。
public void PrintQueryInfo<T>(IQueryable<T> q){
Console.WriteLine(q.Expression.ToString());
}