Я работаю в поисковой системе, которая оценивает элементы базы данных параметрически. Из-за этого я настроил класс оценки, который позволяет контроллеру управлять и возвращать оценки определенных элементов. Например, скажем, я забиваю компьютеры. Если кто-то выберет определенный объем ОЗУ в форме поиска, я хочу, чтобы совпадение было выше, чем, скажем, почти совпадение.
Класс позволяет добавлять оценки на основе идентификатора элемента базы данных в качестве индекса:
public class ScoringMechanism {
// Dictionary that holds scores
private Dictionary<int, int> _scores;
public ScoringMechanism() {
this._scores = new Dictionary<int, int>();
}
public AddOrUpdate(int id, int score) {
if (_scores.ContainsKey(id)) {
_scores[id] += score;
} else {
_scores.Add(id, score);
}
}
}
Внутри контроллера я проверяю совпадение так:
var computers = from computer in _context.Computers select computers;
foreach (Computer computer in computers) {
if (computer.GBAmt == Request.Querystring["GB"]) {
scores.AddOrUpdate(computer.ID, 15);
}
}
Что я замечаю в своем коде, не могу понять: при динамическом обновлении счета через переменную computer.ID счет не обновляется. Однако когда я явно указываю идентификатор, он обновляется.
По сути,
scores.AddOrUpdate(15, 25);
работает.