public int SetNumber(FinancialEntities db, bool Redirected = false)
{
db = new FinancialEntities();
List<Document> ds = db.Documents.Where(d => DbFunctions.TruncateTime(d.Date) > DbFunctions.TruncateTime(Date) && d.UnitID == UnitID).ToList();
ds.Remove(this);
ds = ds.OrderBy(d => d.Date).ToList();
if (ds.Count > 0)
{
Number = ds.FirstOrDefault().Number;
int tn = (int)Number;
foreach (var item in ds)
{
tn++;
if (item.Number != tn)
{
item.Number = tn;
db.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
db.SaveChanges();
}
else
{
Number = db.Documents.Where(d => d.UnitID == UnitID).Count() > 0 ? db.Documents.Where(d => d.UnitID == UnitID).Max(d => d.Number) + 1 : 1;
}
List<int?> nums = db.Documents.Where(d => d.UnitID == UnitID).Select(d => d.Number).ToList();
int nc = nums.Count();
int ndc = nums.Distinct().Count();
if (nums.Distinct().Count() != nums.Count() && Redirected == false)
{
if (ds.Count() == 0)
ds = db.Documents.Where(d => d.UnitID == UnitID).ToList();
ds.First().SetNumber(db, true);
}
return (int)Number;
}
- это метод, который помещает число в начало даты и фиксирует остальные записи после этой даты. это занимает много времени, чтобы пройти через записи и вызывает много проблем. как я могу оптимизировать это?