Linq to sql Linq2Sql、GroupBy和返回特定对象

Linq to sql Linq2Sql、GroupBy和返回特定对象,linq-to-sql,group-by,Linq To Sql,Group By,我有一个关键字列表 披萨(晚上10:13) 牛奶(晚上10:12) 披萨(晚上10:11) 披萨(晚上10:10) 牛奶(晚上10:09) 豆子(晚上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) 所以基本上:在创建日期之后列出关键字,按关键字和

我有一个关键字列表

  • 披萨(晚上10:13)
  • 牛奶(晚上10:12)
  • 披萨(晚上10:11)
  • 披萨(晚上10:10)
  • 牛奶(晚上10:09)
  • 豆子(晚上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)
所以基本上:在创建日期之后列出关键字,按关键字和进行分组。使用lambda表达式如何实现这一点?以及如何将它们作为特定类型的对象返回?比如说键入
LatestSearch

更新 以以下查询结束:

var searches = db.Searches
             .GroupBy(s => s.Keyword)
             .Select(g => g.OrderByDescending(o => o.CreatedDate).First())
             .OrderByDescending(o => o.CreatedDate)
             .Take(5);
像这样:

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
,请编写以下内容:

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

创建日期之后的
是什么意思?我仍然不知道你的意思。谢谢你的回答,SLaks。我已经更新了我的问题。抱歉搞混了。看起来像我要找的!但如何将它们作为IEnumerable返回?是的,但我不想按Count()排序,但是.CreatedDate:-)