首页 > 解决方案 > Linq 查询组按权重

问题描述

AllWordIDsAndWeightingsDictionary<int, double>出现在搜索查询中的单词的唯一 ID,以及它们相应的权重。

给定以下查询:

returnedObjectIDs = new List<int>(db.WordObjectMaps
    .Where(c =>
        c.ForObjectTypeID == TopicObjectTypeID
        && AllWordIDsAndWeightings.Select(w=> w.Key).ToList().Contains(c.WordID)
    )
    .GroupBy(c => c.ForObjectID)
    .Select(c => c.Key)
);

我想修改它,以便:

group by 语句包含word frequency * word weighting每个单词的总和。然后我可以按此值降序排序并获取最高n记录。

这可能吗?

标签: c#asp.netlinq

解决方案


returnedObjectIDs = new List<int>(db.WordObjectMaps
    .Where(c =>
        c.ForObjectTypeID == TopicObjectTypeID
        && AllWordIDsAndWeightings.ContainsKey(c.WordID)
    )
    .Select(c => new { Word = c, Weight = AllWordIDsAndWeightings[c.WordID])
    .GroupBy(c => x.Word.Value * c.Weight) // replace with your condition
    .Select(c => c.Key)
);

推荐阅读