2010-02-24 53 views
0

我有一个关键字列表;Linq2Sql,GroupBy并返回特定对象

  • 比萨饼(下午10时13分)
  • 乳(下午10点12分)
  • 比萨饼(下午10点11分)
  • 比萨饼(下午10点10)
  • 牛奶(10:下午9时)
  • 豆(下午10:08)
  • 玉米(下午10:07)
  • 汁(下午10点06分)
  • 富(10:时05分)

我想他们组像这样(前5位,通知foo是不在列表中):

  • 比萨(3)(下午10点13)
  • 牛奶( 2)(下午10点12)
  • 豆类(1)(下午10点08分)
  • 玉米(1)(下午10点07分)
  • 汁(1)(下午10点06分)

所以基本上:在创建日期后列出关键字,按关键字和.Take(5)分组。而这怎么可能使用lambda表达式呢?以及如何将它们作为特定类型的对象返回?我们假设输入LatestSearch

UPDATE 结束了与此查询:

var searches = db.Searches 
      .GroupBy(s => s.Keyword) 
      .Select(g => g.OrderByDescending(o => o.CreatedDate).First()) 
      .OrderByDescending(o => o.CreatedDate) 
      .Take(5); 
+0

你是什么意思'创建日期后'? – SLaks

+0

我还不确定你的意思。 – SLaks

回答

2

像这样:

table.Where(s => whatever) 
    .GroupBy(s => s.Keyword) 
    .Select(g => new { 
     Keyword = g.OrderByDescending(s => s.Date), 
     Count = g.Count(), 
     Date = g.Max(s => s.Date()) 
     }) 
    .OrderByDescending(s => s.Count) 
    .Take(5); 

编辑:如果你只想要一个IEnumerable<LatestSearch>,写:

table.Where(s => whatever) 
    .GroupBy(s => s.Keyword) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => g.First()); 
    .Take(5); 
+0

谢谢你的回答,SLaks。我已经更新了我的问题。对困惑感到抱歉。 – Kordonme

+0

看起来像我在找什么!但是,如何将它们作为IEnumerable 返回? – Kordonme

+0

是的,但我不想通过Count()订购,但.CreatedDate :-) – Kordonme