2013-04-15 4 views
-1

Я немного застрял в преобразовании SQL-запроса в LINQ. Может ли любой орган помочь мне. Вот мой запросSQL self join query к запросу LINQ

SELECT x.* 
    FROM FilterType x 
    JOIN (SELECT t.FilterType 
      FROM FilterType t 
      where FilterId in (7,15) 
     GROUP BY t.FilterType 
     HAVING COUNT(t.FilterType) > 1) y ON y.FilterType = x.FilterType 

Спасибо заранее.

+0

Вы можете использовать LINQPad для преобразования SQL-запросов в LINQ. –

+0

@JibranKhan Я считаю, что LINQPad делает нечто противоположное - он показывает SQL, сгенерированный для запроса LINQ. Для создания LINQ вам нужно что-то вроде Linqer –

+0

. Затем есть еще один вызов Linqer, но просмотрите ответы здесь http://stackoverflow.com/questions/12238423/linqpad-convert-sql-to-linq-command –

ответ

1

Предположим, у вас есть int[] ids = { 7, 15 }. Тогда запрос будет выглядеть следующим образом:

from t in FilterType.Where(x => ids.Contains(x.FilterId)) 
group t by t.FilterType into g 
where g.Count() > 1 
from f in g 
select f 

Или с синтаксисом метода:

FilterType.Where(x => ids.Contains(x.FilterId)) 
      .GroupBy(t => t.FilterType) 
      .Where(g => g.Count() > 1) 
      .SelectMany(g => g); 

Сгенерированный SQL не будет точно, как ваша, но результат должен быть таким же.

0
from a in FilterType 
join b in 
    (
     from x in FilterType 
     where (new int[]{7, 15}).Contains(x.FilterID) 
     group x by new {x.FilterType} into g 
     where g.Count() > 1 
     select new {FilterType = g.Key.FilterType} 
    ) on a.FilterType equals b.FilterType 
select a;