61
|
Erik Forbes · 技术社区 · 15 年前 |
![]() |
1
79
可读性是这里的主要问题。认为
比
或者设想希望在SQL Server上执行查询的一部分,而在内存中执行其余部分:
对战
现在,关于为什么这种方法是有用的,想想
因此列举
导致在SQL Server上执行查询,而枚举
将由表示的表
这就是重点
|
![]() |
2
15
除了可读性之外,我还考虑了一个与查询实现相关的原因:对通过另一个Linq提供程序返回的匿名类型使用Linq to对象。不能强制转换为匿名类型(或匿名类型集合),但可以使用
例子:
很明显,这里的原因是我们希望使用像Linq to SQL这样的东西将一些记录拉入匿名类型,然后使用客户端的Linq to对象执行一些自定义逻辑(通过Linq to SQL是不可能的)。
铸造到
感谢所有回答我的人帮助我拼凑起来。=) |
![]() |
3
4
当我读这本书的时候
目的是为了
举例来说,假设我们
问题是SQL Server不支持正则表达式,因此Linq to DB提供程序将抛出异常,抱怨查询无法转换为SQL。我们可以通过以下两个步骤来解决这个问题:首先通过Linq to SQL查询检索所有关于流感的文章,然后在本地筛选不到100个单词的摘要:
使用AsEnumerable,我们可以在单个查询中执行相同的操作:
调用AsEnumeratable的另一种方法是调用ToArray或ToList。 AsEnumeratable的优点是它不强制立即执行查询 也不会创建任何存储结构。 |
![]() |
4
3
这只是一个向IEnumerable投射的最好和最短的方法。如果您在Reflector中查看它,您可以看到它除了将对象作为IEnumerable返回之外什么都不做。 来自MSDN:
|
![]() |
5
3
匿名类型是提供这些扩展方法的主要原因。 (不能在泛型参数中使用匿名类型) 但是方法调用可以使用类型推断,允许您忽略在泛型参数中指定类型。 |
![]() |
6
3
如果对象上有与Linq扩展方法同名的方法,则隐藏扩展方法。使用AsEnumerable允许您访问扩展名。 这在SP1中似乎是新的。 昨天我有一行代码从数据表中提取成员标识符:
在我安装了SP1之前,它工作得很好。现在,除非它读到
编辑:我找到了真正的原因 这样,您就可以在同一个LINQ语句中同时使用远程方法(例如SQL语句中的where)和本地方法。如果不使用AsEnumerable(即仅强制转换),它将使查询生成器尝试为包含本地方法的远程执行创建表达式树。将asenumerable放入查询将导致该查询的其余部分在本地对远程查询的结果执行。 从 https://msdn.microsoft.com/en-us/library/bb335435(v=vs.110).aspx
|
![]() |
7
2
如您所说,如果类型已经实现
我猜,这只是个猜测,是不是
它还允许不实现的类型
|
![]() |
Imad · Linq扩展方法没有使用Object类的Equals 1 年前 |
![]() |
user8512043 · 根据每个元素中的数字对列表进行排序 2 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Drago · Linq通过比较Id和具有Id的对象列表来查询获取列表 2 年前 |