2009-08-04 2 views
0

Я пытался в течение нескольких дней написать «перевести» этот запрос в LINQ без успеха. Не могли бы вы, ребята, помочь мне? Я также хотел бы получить некоторое объяснение, чтобы научиться чему-то из этого.Подзапросы в linq

Вот T-SQL-запрос:

SELECT R.ResourceID, R.DefaultValue 
FROM Resources as R 
JOIN 
    (SELECT [t0].[NameResourceID] AS [ResourceID] 
    FROM [dbo].[Sectors] AS [t0] 
    LEFT OUTER JOIN [dbo].[LocalizedResources] AS [t1] ON [t0].[NameResourceID] = [t1].[ResourceID] and [t1].[LanguageID] = 2 
    WHERE t1.Value IS NULL) AS subQ 

ON R.ResourceID = subQ.ResourceID 

+0

Почему вы "СОЕДИНЕНИЕ" в этом SubQ ... ты не вытаскивая из него ни одного значения. Это должно быть предложение WHERE, поскольку все, что вы делаете, это использовать его для фильтрации. Вероятно, поэтому вам трудно перевести его. –

+0

Все, что мне нужно, это идентификаторы этих записей из subQ. Действительно, я использую его только для фильтрации. Я просто не мог найти лучшего решения. Есть ли у вас какие-либо предложения? В основном я пытаюсь найти все ресурсы, которые не были локализованы на языке X, а затем посмотреть, есть ли среди них какие-либо сектора. – 2009-08-04 23:07:42

ответ

0

попробовать что-то Thank как что:

from r in db.Resources 
join subQ in (from t0 in db.Sectors 
       join t1 in db.LocalizedResources on t0.NameResourceID equals t1.ResourceID 
       where t1.LanguageId 
       && t1.Value == null 
       select new { ResourceID = t0.NameResourceID }) on r.ResourceID equals subQ.ResourceID 
select new { r.ResourceId, r.DefaultValue }; 
+0

К сожалению, это не сработает. Он переводится в TSQL в:... SELECT [t0] [RESOURCEID], [t0] [DefaultValue] FROM [DBO] [Ресурсы] AS [t0] INNER JOIN \t ([DBO] [секторов. ] AS [t1] INNER JOIN [dbo]. [LocalizedResources] AS [t2] ON [t1]. [NameResourceID] = [t2]. [ResourceID]) ON [t0]. [ResourceID] = [t1]. [ NameResourceID] WHERE 0 = 1 Я попытался изменить его, но я не мог стать лучше. – 2009-08-04 23:09:33

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