在 SQL 中实现所有功能

Implementing the All functionality in SQL

我正在尝试编写一个 SQL 查询,其中所有特定组都满足条件。

更新 简化的 Table 结构看起来像这样

ID, TitleID,  BlockFromSale
---------------------------
1 | 1  | true
2 | 1  | true
3 | 1  | true
4 | 2  | false
5 | 2  | true

此 table 只会 return 项目 TitleID 1。

实际上我只需要标题ID而不是整个项目,但两者都满足条件。

如何在 SQL 中编写此 Linq 查询?

var Query = Data.Items.GroupBy(t => t.TitleID).Where(i => i.All(b => b.BlockFromSale == true));

我尝试查看 Sql 查询,但它立即将其转换为 object。

基本上我只需要一个查询来获取所有 TitleID,每个项目的 BlockFromSale 都设置为 true,因此对于上面 table 中的示例,它只会 return TitleID,1

可以使用查询的 Log 属性 查看生成的 SQL LINQ 查询。 How to: Display Generated SQL 显示了一个例子。基本上,网站显示了这个例子:

db.Log = Console.Out;
IQueryable<Customer> custQuery =
    from cust in db.Customers
    where cust.City == "London" 
    select cust;

foreach(Customer custObj in custQuery)
{
    Console.WriteLine(custObj.CustomerID);
}

如果你想检查集合中所有行的谓词p,你可以写

NOT EXISTS (... WHERE NOT(p))

因为All(p) == !Any(!p)在伪语法中。

我猜 ORM 也是这样做的。

没有一种简单的方法可以满足您的要求,但使用子查询是一种简单但速度较慢的方法

SELECT DISTINCT i.TitleID 
FROM Items i 
WHERE i.TitleID not in 
(SELECT DISTINCT TitleID 
 FROM items it
 WHERE it.BlockFromSale = 0)

因此它将删除具有错误的 titleids。