2015-03-09 2 views
1

Я пытаюсь написать SQL-запрос, где все определенные группы удовлетворяют условию.Выполнение всех функций в SQL

Update Структура упрощенной Таблица будет выглядеть следующим образом

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

этой таблица будет возвращать только элементы TitleID 1.

В действительности нужно только в заголовке ID, а не все но либо будет удовлетворять условиям.

Как я могу написать этот запрос Linq в SQL?

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

Я пытаюсь посмотреть запрос Sql, но он просто мгновенно передает его объекту.

В основном я просто нужен запрос, который хватается все TitleIDs, которые для каждого элемента BlockFromSale установлено значение истинно так для примера из таблицы выше, было бы только вернуть TitleID, 1

+0

Какова структура таблицы? –

ответ

0

Существует не простой способ сделать то, что ваш просят, но простой, но некоторые, что медленный путь будет использовать подзапрос

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

так удалим titleids, которые имеют ложное.

+0

Это делает именно то, что я искал –

2

Это можно увидеть сгенерированный SQL запроса LINQ с использованием свойства запроса Log. 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); 
} 
2

Если вы хотите проверить предикат p для всех строк набора вы можете написать

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

Потому что в псевдо-синтаксисе All(p) == !Any(!p).

Я бы предположил, что ORM тоже так делают.

+1

Как бы этот полный выбор был написан? Выберите i.TitleID из элементов i Группа i.TitleID Не существует (i.Blockfromsale = 0)? –

+0

Я все время вижу, что везде, но у меня все еще нет идеи, как реализовать это с помощью groupby –

+1

Это не имеет отношения к группе вообще. Это просто предикат, который вы можете поместить в любой предикат. Например, в предложении WHERE. – usr

Смежные вопросы