gpt4 book ai didi

sql - 在同一字段上使用 And 运算符的 Linq to Sql

转载 作者:行者123 更新时间:2023-12-01 01:35:23 25 4
gpt4 key购买 nike

我有以下 linq 查询(应用于 Northwind 数据库)

(from od in OrderDetails
where od.ProductID == 11 || od.ProductID == 42
select od.OrderID).Distinct()

这给了我一个订单 ID(67 个项目)列表,其中订单包括产品 11 或 42。我如何重写查询以给我一个订单 ID 列表,其中订单 包括产品 11 和 42 ?结果列表应仅包含一个订单 (orderid = 10248)

显然,以下查询不返回任何订单。
(from od in OrderDetails
where od.ProductID == 11 && od.ProductID == 42
select od.OrderID).Distinct()

这是一个可以完成这项工作的 sql 查询,但是在 linq 中编写它的最佳(或最有效)方式是什么?
    SELECT DISTINCT OrderID
FROM [Order Details]
WHERE (OrderID IN
(SELECT OrderID
FROM [Order Details] AS OD1
WHERE (ProductID = 11))) AND (OrderID IN
(SELECT OrderID
FROM [Order Details] AS OD2
WHERE (ProductID = 42)))

[编辑]

感谢 klausbyskov 的解决方案。由此我能够构建一个表达式(使用 PredicateBuilder),它可以获取产品 ID 的动态列表,在 where 子句中使用它们并返回订单列表。如果有人感兴趣,这里是。
public static Expression<Func<Order, bool>> WhereProductIdListEqualsAnd( int[] productIds )
{
var condition = PredicateBuilder.True<Order>();

foreach ( var id in productIds )
{
condition = condition.And( o => o.OrderDetails.Any( od => od.ProductId == id ) );
}

return condition;
}

最佳答案

改为开始对订单关系的查询:

var result = Orders.Where(o => o.OrderDetails.Any(od => od.ProductId == 11) 
&& o.OrderDetails.Any(od => od.ProductId == 42));

关于sql - 在同一字段上使用 And 运算符的 Linq to Sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418308/

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