如何从表中获取最近搜索的关键字?

时间:2014-08-06 04:41:52

标签: c# sql-server linq-to-entities

我在SQL Server中有一个表,结构如下:

  RecentSearches(
      [Id]         int
     ,[Keyword]    string
     ,[SearchedOn] datetime 
  )

我需要查询该表以获取最近搜索的100个唯一关键字,按SearchedOn递减排序。

例如,如果我有以下数据......

          1, adam, 1/1/2014 11:0
          2, sham, 1/1/2014 11:0
          3, ram, 3/1/2014 12:0
          4, sham, 4/1/2014 12:0
          5, ram, 5/1/2014 12:0
          6, sham, 6/1/2014 12:0
          7, ram, 7/1/2014 12:0
          8, john, 8/1/2014 12:0

......,结果应该告诉我......

        john
        ram 
        sham 
        adam 

如果我只查询4个热门关键字。

我可以使用distinct关键字进行查询;但是我如何使用SearchedOn字段,因为结果应该按SearchedOn字段排序?

另外,如果可能的话,我需要在LINQ to Entities中进行此查询。

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

(from rs1 in RecentSearches
 where rs1.SearchedOn ==
     (from rs2 in RecentSearches
      where rs2.Keyword == rs1.Keyword
      select rs2.SearchedOn).Max()
 orderby rs1.SearchedOn descending
 select rs1.Keyword).Take(100)

使用您的样本数据,它会产生......

john
ram
sham
adam

......正如所料。

需要注意几点要点:

  1. 您本身不需要Distinct,因为where条件基于每个SearchedOn的最大Keyword - 这本质上是截然不同的。
  2. 由于您的示例数据仅包含4个不同的Keyword值,Take(4)Take(100)将产生相同的结果。

答案 1 :(得分:0)

未测试:

LINQ

var lastHundredSearches = (from p in RecentSearches
                        orderby p.SearchedOn descending
                        select p.Keyword).Take(100);

LAMBDA

var lastHundredSearches = RecentSearches.OrderByDescending(p => p.SearchedOn).Select(k=>k.Keyword).Take(100);