【问题标题】:Difference between Select and Where in Entity Framework实体框架中 Select 和 Where 的区别
【发布时间】:2012-01-04 01:00:26
【问题描述】:

Entity Framework 中的.Select().Where() 有什么区别? 比如

return ContextSet().Select(x=> x.FirstName == "John")

ContextSet().Where(x=> x.FirstName == "John")

什么时候应该使用.Select.Where

【问题讨论】:

标签: c# .net linq entity-framework linq-to-sql


【解决方案1】:

Select 是一个投影,所以你得到的是表达式x=> x.FirstName == "John" 在服务器上为ContextSet() 中的每个元素求值。即很多真/假值(与原始列表相同的数字)。如果您查看 select 将返回类似 IEnumerable<bool> 的内容(因为 x=> x.FirstName == "John" 的类型是布尔值)。

Where 过滤结果,返回原始类型的可枚举(无投影)。


因此,当您想保留所有结果但更改其类型(投影它们)时,请使用 Select

当你想过滤你的结果时使用Where,保持原来的类型

【讨论】:

  • 那么哪里更像sql select语句呢?
  • 否,LINQ 和 SQL 中的 WHERE 用于过滤结果,SELECT 将结果投影到 LINQ 和 SQL 中
  • SELECT 语句控制每个结果数据行返回的内容,例如,您可以有一个名字和姓氏字段并让选择将其更改为全名 = 名字 + " " + 姓氏,所以数据您查询有 2 个字段,但查询结果有 1 个。
  • 是的,我想通了。我只是不知道为什么人们在可以使用更简单直接的短语(例如“控制返回的内容”甚至“允许开发人员选择返回的列”时)仍然使用诸如“投影”之类的词。我什至不知道“投影”是开发人员词典的一部分,更不用说它在这种情况下的含义了。 “选择你的列[或类属性]”可以。
  • @Jeremy 投影是数据库理论中的一个术语。但我同意它不像其他解释 SELECT 作用的方式那样普遍。
【解决方案2】:

Where() 是一个过滤器。

Select() 选择不同的数据。
您的 Select() 示例将返回一个布尔值集合。

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多