gpt4 book ai didi

c# - 多次使用 "from"是否等同于加入?

转载 作者:太空狗 更新时间:2023-10-29 20:51:47 24 4
gpt4 key购买 nike

我遇到了以下代码,但不知道这段代码中两次 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;

这样做你会很疯狂,但是 wherejoin 实际上是不必要的 -- 它们只是更快、更短、更高效编写精选的方法。

关于c# - 多次使用 "from"是否等同于加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com