- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到了以下代码,但不知道这段代码中两次 from 是什么意思。这是否意味着 Books 和 CSBooks 之间存在连接?
List<Product> Books = new List<Product>();
List<Product> CSBooks = new List<Product>();
var AllBooks = from Bk in Books
from CsBk in CSBooks
where Bk != CsBk
select new[] { Bk, CsBk };
最佳答案
这有点像连接。当你说:
from customer in customers
join order in orders on customer.Id equals order.CustomerId
select whatever
这本质上是一种更有效的写作方式:
from customer in customers
from order in orders
where customer.Id == order.CustomerId
select whatever
你知道为什么吗?第一个说“嘿查询处理器,客户和订单有一种特殊的关系,这种关系是由客户 ID 和订单中存储的客户 ID 的相等性定义的”。第二个只是说“给我笛卡尔积——客户和订单的所有可能组合——然后过滤掉没有任何意义的组合”。它们的效果相同,但前者效率更高。
但是,您可以使用多个“from”子句来做比笛卡尔积更花哨的事情。假设一位客户可以有多个地址:
from customer in customers
from address in customer.Addresses
select address
多个 from
子句实际上是“选择很多”。也就是说,它们采用一个序列,一种从每个项目中生成序列的方法第一个序列,然后将所有结果序列合并在一起。
“多选”简单但功能强大;我们已经看到您可以使用“多选”来进行(缓慢但正确的)连接操作。事实上,如果您足够聪明并且不介意浪费大量时间和内存,您可以使用 select many 来进行所有可能的查询。例如:
from customer in customers
where customer.City == "London"
select customer
可以这样写而没有“where”:
from customer in customers
from c in (customer.City == "London" ?
new Customer[] {customer} :
new Customer[] { } )
select c;
这样做你会很疯狂,但是 where
和 join
实际上是不必要的 -- 它们只是更快、更短、更高效编写精选的方法。
关于c# - 多次使用 "from"是否等同于加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095669/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!