Ank*_*kar 2 c# linq asqueryable
我在使用时遇到问题AsQueryable,我找到了一些示例,其中此扩展需要使用AsQueryable,在某些示例中直接作为AsQueryable().我用秒表检查这两个案子,并得出几乎相同的结果进行多次调查.让我们举个例子:
//With AsQueryable()
var studentId = dbContext.Students.AsQueryable().Where(a=>a.Name == "Abc").Select(a=>a.Id).FirstOrDefault();
//With AsQueryable<Student>()
var studentId = dbContext.Students.AsQueryable<Student>().Where(a=>a.Name == "Abc").Select(a=>a.Id).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
使用AsQueryable()和AsQueryable<type>()有效之间的区别是什么?
当您在AsQueryable()未指定泛型参数类型的情况下调用时,它将由编译器从您调用它的对象中推断出来.
var source = new List<int>();
var queryable = source.AsQueryable(); // returns IQueryable<int>
Run Code Online (Sandbox Code Playgroud)
相当于
var queryable = source.AsQueryable<int>();
Run Code Online (Sandbox Code Playgroud)
更新
回答评论中提出的问题:
那么有两种不同的方式有什么用?当我们只使用其中一个时,是否有任何特殊情况?
是的,在使用匿名类型时,您无法显式指定类型参数,因为您没有类名:
source.Select((x,i) => new { Value = x, Index = i }).AsQueryable();
Run Code Online (Sandbox Code Playgroud)
这正是引入类型推断的原因:让您在使用匿名类型时调用泛型方法而不指定类型参数.但是因为它不仅适用于匿名类型,并且可以节省您不必要的输入,所以只要有可能就依赖类型推断是很常见的.这就是为什么你AsQueryable()大多数时候可能会看到没有类型参数的原因.
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |