2016-12-31 2 views
1

У меня есть оператор select, как показано ниже.Как выполнить агрегированные функции вложенной группы с несколькими столбцами groupBy с использованием сущности framework и linq?

SELECT Doc_Id term 
FROM [Inverted_Index] 

Как я могу сделать что-то вроде следующего утверждения, использующего сущность framework и linq?

select max(count(term)) 
from inverted_index 
where doc_id = Given_doc_id 
group by doc_id, term 

Given_doc_id: известен и принят приложением.

Я попытался решить эту проблему в качестве обходного пути, создавая следующий вид и выбрать макс (FREQ)

CREATE VIEW [dbo].[Terms_Freq_Per_Doc] 
AS (SELECT Doc_Id, term, count(term) freq 
FROM [Inverted_Index] 
group by Doc_Id, term); 

... но и не успех, потому что я не мог быть в состоянии добавить вид на диаграмме объекта .edmx, потому что ограничения добавления вида на .edmx

, пожалуйста, помогите решить это, как получить max (count (term)) ???

заблаговременно.

ответ

0

Надежда ниже код может помочь вам:

int maxTerm = (from o in db.Inverted_Index 
          where o.Doc_Id == Given_doc_id 
          group o by new { o.Doc_Id, o.term } into g 
          select g).Max(p => p.Select(o => o.term).Count()); 
+0

очень близко, но есть ошибка в синтаксисе, пожалуйста, проверьте его. –

+0

Я исправил код, повторите попытку. – kcwu

0

Я получил его

int maxTerm = db.Inverted_Index 
         .Where(i => i.Doc_Id == Given_doc_id) 
         .GroupBy(inv => new { inv.Doc_Id, inv.term }) 
         .Select(g => new { g.Key.Doc_Id, g.Key.term, cnt = g.Count() }) 
         .Max(x =>x.cnt); 

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

  • Нет связанных вопросов^_^