首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#:AsQueryable()与AsQueryable<type>()

C#:AsQueryable()与AsQueryable<type>()
EN

Stack Overflow用户
提问于 2014-04-17 22:36:38
回答 2查看 1.6K关注 0票数 2

我在使用AsQueryable时遇到了问题,我在其中发现了一些示例,其中包括转换,即此扩展所需的AsQueryable,以及在某些示例中直接作为AsQueryable()。我用秒表检查了这两起案件,并得出了几乎相同的结论,以便进行多次调查。让我们举个例子:

代码语言:javascript
运行
AI代码解释
复制
//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();

使用AsQueryable()AsQueryable<type>()有什么区别,哪个是有效的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-17 22:43:08

当您调用AsQueryable()而不指定泛型参数类型时,编译器将从调用它的对象推断它。

代码语言:javascript
运行
AI代码解释
复制
var source = new List<int>();
var queryable = source.AsQueryable();  // returns IQueryable<int>

等于

代码语言:javascript
运行
AI代码解释
复制
var queryable = source.AsQueryable<int>();

更新

要回答评论中提出的问题:

那么,有两种不同的方式有什么用呢?当我们只使用其中一种时,有什么特殊情况吗?

是的,在使用匿名类型时不能显式指定类型参数,因为您没有类名:

代码语言:javascript
运行
AI代码解释
复制
source.Select((x,i) => new { Value = x, Index = i }).AsQueryable();

这正是引入类型推断的原因:允许在使用匿名类型时调用泛型方法而不指定类型参数。但是,由于它不仅适用于匿名类型,而且可以节省不必要的类型,所以尽可能依赖类型推断是很常见的。这就是为什么在大多数情况下,您可能会看到没有类型参数的AsQueryable()

票数 6
EN

Stack Overflow用户

发布于 2014-04-17 22:43:48

只要有可能,编译器就可以为您进行类型推断:http://msdn.microsoft.com/en-us/library/twcad0zb.aspx

在这种情况下,无论哪种方式,都没有区别、优势或点球。类型推断只会使您的生活更轻松,代码更短。

但是,我在使用API时遇到了这样的情况:类型实现了多个接口,例如,

代码语言:javascript
运行
AI代码解释
复制
IEnumerable<IMySimpleThing>, IEnumerable<IMyComplexThing>, IEnumerable<MyComplexThing>

如果你试图获得一个特定的接口,类型推断是不够的。

代码语言:javascript
运行
AI代码解释
复制
IEnumerable<MyComplexThing>

因此,在这种情况下,将类型指定为泛型,比如.AsQueryable<MyComplexThing>(),就可以做到这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23148769

复制
相关文章
1.javascript中的函数
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数(根据需要使用参数),以及置于括号中的待执行代码(功能),返回值(可选)。
joshua317
2022/03/25
5050
Python中的列表(1)
  所以说访问列表的元素,可以在列表名后加方括号,方括号内输入索引,即可访问对应索引的元素。(ps:索引从0开始)
py3study
2020/01/16
3.4K0
java1-7和1-8的排序代码
String[] atp = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer","Roger Federer", "Andy Murray","Tomas Berdych", "Juan Martin Del Potro"}; List<String> players = Arrays.asList(atp)
tea9
2022/07/16
2020
java1-7和1-8的排序代码
Python中的命名空间和作用域(1)
本文将介绍Python命名空间和作用域,它们用于分配Python程序中的对象。Python语言是一种能够实现面向对象编程的高级语言,或者说,在Python中,“万物皆对象”。
老齐
2020/08/11
9060
CentOS 7 与 CentOS 6的不同
CentOS 7 vs CentOS 6的不同 (1)桌面系统 [CentOS6] GNOME 2.x [CentOS7] GNOME 3.x(GNOME Shell) (2)文件系统 [CentOS6] ext4 [CentOS7] xfs (3)内核版本 [CentOS6] 2.6.x-x [CentOS7] 3.10.x-x (4)启动加载器 [CentOS6] GRUB Legacy (+efibootmgr) [CentOS7] GRUB2 (5)防火墙 [CentOS6] i
Albert陈凯
2018/04/04
1.1K0
数据结构与算法 1-6 Python列表类型不同操作的时间效率
本系列是我在学习《基于Python的数据结构》时候的笔记。本小节首先回顾一下timeit代码执行时间测量模块,然后通过此模块测算Python中list列表一些操作的时间效率。
触摸壹缕阳光
2019/11/13
7660
数据结构与算法 1-6 Python列表类型不同操作的时间效率
枚举+优化(7)——前缀和1
例1  给定一个长度为N的数组:A1,A2,...,AN。(N <= 100000,1 <= A[i] <= 100000)。然后有M个询问,每次询问给两个整数L,R问A[L]~A[R]的和是多少。(M <= 100000)。  这道题最直接的做法就是每次询问的时候,用一个循环累加A[L]~A[R]的和,伪代码如下: Ask(L,R) Sum = 0 For i = L...R Sum += A[i] return Sum  上面这段伪代码,处理一个询问的时间复杂度是O(R-L),考虑到R最大是N
mathor
2018/06/19
5860
《JavaScript 模式》读书笔记(7)— 设计模式1
  这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。
全栈程序员站长
2022/07/21
4510
《JavaScript 模式》读书笔记(7)— 设计模式1
这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。
zaking
2020/09/02
5400
JavaScript基础1
什么是Javascript? Javascript是一种基于对象和事件驱动的, 与平台无关的 ,具有安全性的 ,弱类型的脚本语言。 为什么要用? 使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择。 Javascript的特点: 1.是一种脚本编写语言 Ja
汤高
2018/01/11
1K0
JavaScript 学习(1)
参考资料:http://www.w3school.com.cn/js/index.asp
lpe234
2020/07/28
8040
JavaScript笔记(1)
编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.
y191024
2022/09/20
6170
JavaScript笔记(1)
JavaScript 入门(1)
JavaScript,就是我们通常所说的JS,是一种嵌入到HTML页面中的脚本语言,由浏览器一边解释一边执行。
Qwe7
2022/04/03
3130
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
ECMAScript(通常称为 JavaScript)是一种经历了许多波折的脚本语言。它最初是为了实现 Netscape Navigator(第一批 Web 浏览器之一)的可扩展性而创建的。JavaScript 最初的命名考虑到了与 Java 的关联(Java 那时正迅速发展成为一种重要语言),多年来,它一直被视为两种语言中的次要语言。
疯狂的技术宅
2019/03/28
8930
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
JavaScript基础1
JavaScript写在<script></script>之间    <script type="text/javascript">表示在<script></script>之间的是文本类型(text),javascript是为了告诉浏览器里面的文本是属于JavaScript语言。      引用外部javascript文件:<script src="script.js"></script> 变量 var mychar 数组  var array =new Array(); 输出内容:    docume
用户1624346
2018/04/10
7350
JavaScript基础1
JavaScript入门(1)
Hello小可爱们,今天我们又要回到学习主题咯,前面学习了HTML和CSS的用法,今天我们就要为Web页面注入生命啦,那就是JavaScript,通过JavaScript我们可以让我们的页面动起来,这也是Web开发中的一座大山。
萌兔IT
2019/07/26
8360
JavaScript入门(1)
《JavaScript 模式》读书笔记(6)— 代码复用模式1
  我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、 继承有很深入的讲解。我也会尽我所能的为大家讲清楚、分析透彻。
全栈程序员站长
2022/07/21
2650
《JavaScript 模式》读书笔记(6)— 代码复用模式1
GPDB6和GPDB7直连primary命令的不同
最近一直在使用GPDB7的版本进行学习,经常需要客户端psql连接primary进行验证,而连接primary必须使用维护模式时的命令:
yzsDBA
2022/12/27
3420
GPDB6和GPDB7直连primary命令的不同
《JavaScript 模式》读书笔记(6)— 代码复用模式1
  我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、 继承有很深入的讲解。我也会尽我所能的为大家讲清楚、分析透彻。
zaking
2020/04/21
4240
《JavaScript 模式》读书笔记(6)— 代码复用模式1
点击加载更多

相似问题

python中的a=[1]和[1]有什么不同?

40

javascript中"1"+"1“& "1”-- "1“的两种不同结果

20

JavaScript和PHP中的RSA-SHA1 1签名不同

17

[1][1]和[1][0]在JavaScript中的结果

26

为什么(([]===[])+/-/)[1] = 'a‘和(1+{})[(1<<1)+1] = 'b’在javascript中?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文