2010-12-15 4 views
0

Скажите, пожалуйста, как преобразовать этот SQL-запрос в LINQ To SQL? Заранее спасибо.SQL-запрос LINQ To SQL-эквивалент

SELECT [Movies].[Name] 
FROM 
(
    SELECT [Value] 
    FROM [Index] 
    WHERE ('WORD1' = [Word] and [MatchCount] = 1) 
    OR ([Word] = 'WORD2' AND [MatchCount] = 1) 
    GROUP BY [Value] 
    HAVING COUNT([Value]) = 2 
) AS [Guids] 
LEFT OUTER JOIN [Movies] ON [Movies].[Guid] = [Guids].[Value] 

ответ

1

Что-то вроде этого? (Внимание, следующий код не тестировался!)

var q = from i in Index 
    where i.MatchCount == 1 && 
    (i.Word == "WORD1" || i.Word == "WORD2") 
    group i by i.Value into g 
    where g.Count() == 2 
    from m in Movies.Where(x => x.Guid == g.Key).DefaultIfEmpty() 
    select m.Name; 
1

В a previous question, кто-то предложил Linqer.

Я никогда не использовал его сам, честно говоря, но я использовал LinqPad экстенсивно. Он делает обратное (а также преобразовывает LINQ в лямбда-выражения) и является одним из моих любимых инструментов.

+0

Спасибо за ваш ответ. Я попробовал Linqer, но для данного запроса он создал очень сложное решение, которое выполняется намного дольше, чем SQL-запрос. – 2010-12-15 18:49:27

+0

Я проверил бы запрос Linqer в LinqPad, чтобы увидеть, действительно ли SQL, сгенерированный из этого оператора LINQ, соответствовал запросу SQL, указанному выше. – jwiscarson 2010-12-15 18:51:29