2016-12-31 25 views
1

我有一个选择语句如下。如何使用实体框架和linq执行具有多个groupBy列的嵌套组聚合函数?

SELECT Doc_Id term 
FROM [Inverted_Index] 

我该如何使用实体框架和linq做下面的语句?

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

Given_doc_id:已知并被应用程序传递。

我试图通过创建以下视图来解决这个问题的解决方法和选择MAX(频率)

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

请帮忙解决这个,如何获得最大(计数(期限))?

谢谢你提前。

回答

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);