代码之家  ›  专栏  ›  技术社区  ›  Jronny

优化Linq码

  •  0
  • Jronny  · 技术社区  · 15 年前

    桌子:

    项目
    身份证件



    关键字

    项目关键字
    项目ID
    关键字ID


    通过关键字搜索项目:
    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 回复  |  直到 15 年前
        1
  •  1
  •   Amy B    15 年前

    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)