2010-09-27 44 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