gpt4 book ai didi

.net - 如何在 LINQ 中的子表上创建 where 条件

转载 作者:行者123 更新时间:2023-12-04 22:38:42 26 4
gpt4 key购买 nike

这是为了回应这个question在另一个问题的答案部分。

我有一个订单集合,每个订单都是一个订单项集合,每个订单项都有一个 PartId。使用 LINQ 如何实现以下 SQL 语句:

1) 选择所有具有特定零件 ID 的订单

SELECT *
FROM Order
WHERE Id in (SELECT OrderId FROM OrderItems WHERE PartId = 100)

2) 选择 Order.OrderNumber 和 OrderItem.PartName
SELECT Order.OrderNumber, OrderItem.PartName
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId
WHERE OrderItem.partId = 100

3) 选择 Order.OrderNumber 和整个 OrderItem 详细信息:
SELECT Order.OrderNumber, OrderItem.*
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId
WHERE OrderItem.partId = 100

最佳答案

实际代码应该是

1)

var orders = from o in Orders
where o.OrderItems.Any(i => i.PartId == 100)
select o;

Any() 方法返回一个 bool 值,就像 SQL 的“in”子句。这将获得 PartId 为 100 的 Any OrderItems 的所有订单。

2a)
// This will create a new type with the 2 details required 
var orderItemDetail = from o in Orders
from i in Orders.OrderItems
where i.PartId == 100
select new()
{
o.OrderNumber,
i.PartName
}

两个 from 子句就像一个内部连接。

2b)
// This  will populate the OrderItemSummary type
var orderItemDetail = from o in Orders
from i in Orders.OrderItems
where i.PartId == 100
select new OrderItemSummary()
{
OriginalOrderNumber = o.OrderNumber,
PartName = i.PartName
}

3)
// This will create a new type with two properties, one being the
// whole OrderItem object.
var orderItemDetail = from o in Orders
from i in Orders.OrderItems
where i.PartId == 100
select new()
{
OrderNumber = o.OrderNumber,
Item = i
}

由于“i”是 OrderItem 类型的对象,因此 Item 被创建为 OrderItem。

关于.net - 如何在 LINQ 中的子表上创建 where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/648782/

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