2010-09-27 62 views
0

表:优化的Linq代码

项目
标识

关键字
标识
关键字

ItemKeyword
项目Id
KeywordId
的SequenceNumber


为通过关键字搜索项目:

Keyword keyword = Keyword.FirstOrDefault(a => a.Keyword 
    .Equals(input, StringComparison.InvariantCultureIgnoreCase)); 
IEnumerable<Item> items = keyword.ItemKeyword.OrderBy(a => a.SequenceNumber) 
    .SelectMany(a => a.Item); 

为获得相关的关键字:

IEnumerable<Keyword> relatedKeywords = items.ItemKeyword 
    .SelectMany(a => a.Keyword) 
    .Except(keyword); 
IEnumerable<Keyword> orderedRelatedKeywords = relatedKeywords 
    .OrderByDescending(a => relatedKeywords 
     .Where(b => b 
      .Keyword.Equals(a.Keyword, StringComparison.InvariantCultureIgnoreCase)) 
      .Count()) 
    .Distinct(); 

我没有开发计算机和我的权利,但我希望你能明白我的想法。 这里我真正的问题是按照它使用的时间降序排列相关的关键字。有什么办法可以做到这一点?谢谢。

回答

1

Hrm,你说LinqToEntities,这意味着这些查询将运行在数据库中...如果查询在数据库中运行,是不是字符串比较不区分大小写?

下面是一个查询表单,它将进行分组,然后按组计数排序。

IQueryable<string> orderedKeywords = 
    from k in Keywords 
    group k.Keyword by k.Keyword into g 
    order by g.Count() descending 
    select g.Key; 

    // lambda syntax of above 
IQueryable<string> orderedKeywords = Keywords 
    .GroupBy(k => k.Keyword) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => g.Key) 
+0

似乎很有希望......只有我需要一个lambda在这里=) – Jronny 2010-09-28 14:28:06