Иногда мои пользователи испытывают проблемы, когда в лог-файлы я могу увидеть это исключение (последовательность содержит никаких элементов)Ошибка с LINQ: Последовательность не содержит элементов
Я искать вокруг и можно увидеть это исключение возникает при попытке доступа или использования агрегата в пустом списке.
Я искал код вокруг этого исключения (слишком плохое не было зарегистрировано в стеке), и единственным «потенциальным» виновником являются следующие строки (которые используют либо Fist(), Last(), Single(), либо любую совокупность). Однако я не могу понять, почему и не способен воспроизвести на моем местном. Пожалуйста, помогите советовать.
if (data.Any())
return data.OrderByDescending(d => d.UpdatedTime).First().UpdatedTime;
Здесь data
является List<MyObject>
и MyObject
имеет DateTime
свойство называется UpdatedTime
===== больше окружающих код =====
Это где я получил необработанное исключение в журнал. Метод GetRecentUpdates имеет свой собственный блок catch catch, поэтому исключается.
public ActionResult GetUpdatedTime(long lastUpdated) {
var data = dataAccess.GetRecentUpdates(lastUpdated);
var html = htmlBuilder.Build(data);
return Content(html);
}
public List<MyObject> GetRecentUpdates(long lastUpdatedInTicks) {
var list = _cache.GetRecentRequests(_userCache.UserId);
if (list != null) {
var lastUpdated = new DateTime(lastUpdatedInTicks);
list = list.Where(l => l!=null && l.UpdatedTime > lastUpdated).ToList();
}
return list ?? new List<MyObject>();
}
public List<MyObject> GetRecentRequests(string userId) {
List<MyObject> requests = null;
try {
// simplied but the idea stays
requests = dictionary.Get(userId);
commonRequests = dictionary.Get("common");
if (requests != null) {
if (commonRequests != null)
requests = requests.Union(commonRequests).ToList();
} else {
request = commonRequests;
}
if (requests != null) {
requests = requests.OrderByDescending(r => r.CreatedDateTime).ToList();
}
catch (Exception ex) {
// log the exception (handled)
}
return requests;
}
public string Build(List<MyObject> data) {
var lastUpdated = DateTime.MinValue;
if (data.Any())
lastUpdated = data.OrderByDescending(d => d.UpdatedTime).First().UpdatedTime;
return String.Format("<tr style=\"display:none\"><td><div Id='MetaInfo' data-lastUpdated='{0}' /></td></tr>", lastUpdated.Ticks);
}
Javascript называет GetUpdatedTime
каждые 10 сек. Обычно все идет хорошо, но каждый раз в какое-то время это исключение бросается. Как только он брошен, он постоянно бросается каждые 10 секунд, пока пользователь не обновит страницу.
Выполняет ли этот код в многопоточной среде? – user3596113
Да, но 'data' - локальная переменная внутри метода. – harry
Вы покажете больше, чтобы найти код этого номера? –