2013-11-12 4 views
0

Я хочу, чтобы преобразовать этот запрос LINQ/EFПреобразование SQL-запрос к Linq

select a.ArticleId, COUNT(*) as total from Articles a 
inner join MetaKeywords b on a.ArticleId = b.ArticleId 
where b.MetaKeyword in ('_catalog', '_register') 
group by a.ArticleId 
having COUNT(*) >= 2 

Я попытался много вариантов, но результат не был по желанию.

В приведенном выше запросе 2, количество ключевых слов на поиск из дочерней таблицы ..

+8

«Я пробовал много вариантов, но результат не был, как хотелось бы.» =>, пожалуйста, напишите, что вы пробовали. – ken2k

+0

Вы хотите, чтобы этот точный запрос был переведен в LINQ, или вы хотите, чтобы запрос, который «найдет все статьи, которые имеют некоторые метатексты, дублированные» (например, более одного регистратора или более одного каталога или более одного ...)? – quetzalcoatl

+0

http://stackoverflow.com/questions/530925/linq-using-inner-join-group-and-sum –

ответ

2

попробовать это:

var lst= new string[]{"_catalog","_register"}; 

var qry = (from a in db.Articles 
      join b MetaKeywords on a.ArticleId equals b.ArticleId 
      where lst.Contains(b.MetaKeyword) 
      group a by a.ArticleId into g 
      where g.Count() >= 2 
      select new {ArticleId = g.Key, Total = g.Count()}); 

Следует отметить, что lst объявлен вне фактический запрос.

+1

спасибо, это сработало красиво .... – user1387192

1

Используя метод цепочки:

var list=new[]{"_catalog","_register"}; 
var result=Articles 
    .Join(MetaKeyWords,t=>t.ArticleId,t=>t.ArticleId,(article,metakeywords)=>new{article,metakeywords}) 
    .Where(t=>list.Contains(t.metakeywords.MetaKeyword)) 
    .GroupBy(t=>t.article.ArticleId) 
    .Select(t=>new{ ArticleId=t.Key,Total=t.Count()}) 
    .Where(t=>t.Total>=2); 
+0

вы должны отформатировать свой ответ :) –

+0

Лучше сейчас? :) Это было не очень читаемо ... –

+0

Гораздо лучше (+1), но * Я * думаю, что все еще довольно трудно читать ... синтаксически. 'Join' всегда меня потеряет :) –

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