Linq2Sql,GroupBy并返回特定对象

时间:2010-02-24 14:07:01

标签: linq-to-sql group-by

我有一个关键字列表;

  • 披萨(10:13 PM)
  • 牛奶(晚上10:12)
  • 披萨(晚上10:11)
  • 披萨(10:10 PM)
  • 牛奶(10:09 PM)
  • beans(10:08 PM)
  • 玉米(10:07 PM)
  • juice(10:06 PM)
  • foo(10:05 PM)

我想将它们分组(前5位,注意foo不在列表中):

  • 披萨(3)(10:13 PM)
  • 牛奶(2)(晚上10:12)
  • 豆子(1)(10:08 PM)
  • 玉米(1)(10:07 PM)
  • Juice(1)(10:06 PM)

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

更新 结束了这个查询:

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

1 个答案:

答案 0 :(得分: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);
相关问题