优化Linq代码

时间:2010-09-27 07:08:12

标签: linq linq-to-entities c#-4.0

表:

物品
ID

关键字
标识
关键字

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 个答案:

答案 0 :(得分: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)