#c# #asp.net #linq #linq-to-sql
Вопрос:
Привет, часто мой сервер выходит из строя, и во время анализа я нашел ниже код, в котором он выходит из строя. В дампе, похоже, регрессия и сбой были вызваны I2.Web.dll!I2.Web.Linq.ФильтрБиГридПоле определения протоколаgt;(System.Linq.Я требуюПоле управления протоколомgt; источник, I2.Web.Элементы управления.Сетка сетка) Строка 58 Исключение C# — это поток, израсходовавший свой стек . Этот метод filterByGrid используется везде в приложении, но возникает проблема только для этого источника. Пожалуйста, помогите мне. заранее спасибо
return DB.ProtocolDeviationSites .Where(x =gt; x.ProtocolSiteId == EntityId) .Select(x =gt; new BrowserData { Id = x.Id, ProtocolDeviationId = x.ProtocolDeviationId, Category = x.ProtocolDeviation.ProtocolDeviationCategory.Name, Status = x.ProtocolDeviation.Status, DateOccured = x.ProtocolDeviation.DateOccured, DateReported = x.ProtocolDeviation.DateReported, FollowUpRequired = x.ProtocolDeviation.FollowUpRequired, FollowUpDueDate = x.FollowUpDueDate, FollowUpCloseDate = x.FollowUpCloseDate, PINotified = x.PINotified, AssignedTo = x.AssignedTo, EntityId = x.EntityId, RecordStatus = x.RecordStatus, DateModified = x.DateModified }).FilterByGrid(GridMain);
Также вы можете проверить приведенный ниже метод
var protocols = from p in DB.FilteredProtocols join org in (from po in DB.ProtocolOrgs join go in DB.GlobalOrgs on po.GlobalOrg equals go where po.EntityId == 0 amp;amp; po.RecordStatus == 0 amp;amp; go.EntityId == 0 amp;amp; go.RecordStatus == 0 where go.OrganizationType == OrganizationType.Sponsor.ToString() select new {po.ProtocolId, go.OrganizationName}) on (GridMain.InHistory ? p.EntityId : p.Id) equals org.ProtocolId into prots from r in prots.DefaultIfEmpty() where p.Name != "infolink" where (from ps in DB.ProtocolSites where ps.GlobalSiteId == EntityId amp;amp; ps.EntityId == 0 amp;amp; ps.RecordStatus == 0 select ps.ProtocolId).Contains(p.Id) select new BrowserData { Id = p.Id, RecordStatus = p.RecordStatus, EntityId = p.EntityId, DateModified = p.DateModified, FcoCode = p.FcoCode, OrganizationName = r != null ? r.OrganizationName : null, Name = p.Name, ProtocolPhase = p.ProtocolPhase, ProtocolStatus = p.ProtocolStatus }; return protocols.FilterByGrid(GridMain);//This is line number 58
Это метод FilterByGrid
public static IQueryablelt;Tgt; FilterByGridlt;Tgt;(this IQueryablelt;Tgt; source, Grid grid) { if (source == null) return null; var result = source.Where(GetEntityExpressionlt;Tgt;(grid)); //We're not double fetching here, remember LinqToSQL is a deferred execution model and nothing actually happens yet... if (!grid.InHistory) { switch (grid.RecStatus) { case RecordStatus.All: break; case RecordStatus.Active: if ((grid.Title != null) amp;amp; ( grid.Title.Equals("Site Contact List") || grid.Title.Equals("Principal Investigator List"))) { var resultA = result.Where(GetRecordStatusExpressionlt;Tgt;((int)RecordStatus.Active)); var resultIa = result.Where(GetRecordStatusExpressionlt;Tgt;((int)RecordStatus.Inactive)); result = resultA.Union(resultIa); break; } else { result = result.Where(GetRecordStatusExpressionlt;Tgt;((int)grid.RecStatus)); } break; case RecordStatus.Inactive: case RecordStatus.Deleted: result = result.Where(GetRecordStatusExpressionlt;Tgt;((int)grid.RecStatus)); break; default: result = result.Where(GetRecordStatusExpressionlt;Tgt;((int)RecordStatus.Active)); break; } var se = GetGridSearchExpressionlt;Tgt;(grid); if (se != null) result = result.Where(se); if (grid.SortExpression.HasValue()) result = result.SetGridOrderBy(grid); } var qs = result.ToList(); if (grid.InHistory) { string historyQuery = DataContext.Current.GetCommand(result).ChangeSchemaAndInsertParams(typeof(IHistoryable).IsAssignableFrom(typeof(T))); var histResult = DataContext.Current.ExecuteQuerylt;Tgt;(historyQuery, new object[] { }); return histResult.AsQueryable(); } else { var rs = qs.AsQueryable(); return rs; } }
Комментарии:
1. Не видя кода и ФАКТИЧЕСКОГО сообщения об исключении, это предположение, но я думаю, что это исключение с нулевой ссылкой.
2. Исключением является поток, израсходовавший свой стек
3. Ты имеешь в виду а
StackOverflowException
? Использование правильной терминологии очень важно при обращении за помощью. Как насчет публикации Linq, который генерирует это исключение?4. Я обновил код
5. Это
FilterByGrid
пакет nuget или что-то, написанное внутри? Я ничего не могу сказать об этом в Интернете.