Удалить диапазон элементов из списка без зацикливания - PullRequest
0 голосов
/ 31 октября 2018

Привет. Есть ли более элегантный способ сделать это, если я сделаю цикл, это как функция диапазона, я мог бы просто удалить все найденные предметы

Извините, я должен был показать, как вставляется мой qry.

Кстати, это две разные сущности, которые я удаляю, надеюсь, вы поняли идею.

var qry = db.AssemblyListItems.AsNoTracking().Where(x => 
x.ProductionPlanID == (long)_currentPlan.ProductionPlan ).ToList();

var hasbeenAssembled = db.CompletedPrinteds.AsNoTracking().Where(x =>
x.ProductionPlanId == item.ProductionPlanID).ToList();

var hasbeenFound = db.CompletedPrinteds.AsNoTracking().Where(x => 
x.ProductionPlanId== item.ProductionPlanID).ToList();

foreach (var subitem in hasbeenAssembled )
{
  if(item.ProductionPlanID ==subitem.ProductionPlanId && item.DocumentNo == subitem.DocumentNo && item.DocumentNo == subitem.DocumentNo && item.OutstandingToMake ==0)
    {
      qry.RemoveAll(x => x.ProductionPlanID == subitem.ProductionPlanId && x.DocumentNo == item.DocumentNo && x.ItemCode == subitem.StockCode && item.OutstandingToMake ==0);                   

    }
}

public List<AssemblyListItems>  RemoveDespatchedItems(List<AssemblyListItems> AssemblyItems)
{       
        foreach (AssemblyListItems item in AssemblyItems)
        {
            using (var db = new LiveEntities())
            {
                var hasNotBeenDespatched = db.PalletizedItems.Where(w => w.Despatched != "Not Despatched");
                foreach (var subitem in hasNotBeenDespatched)
                {
               AssemblyItems.RemoveAll(x => x.ProductionPlanID == subitem.ProductionPlanID && x.DocumentNo == item.DocumentNo && x.ItemCode == subitem.StockCode);
                }


            }
        }
        return AssemblyItems;
}

Мне просто нужно удалить элементы из первого запроса hasNotBeenDespatched из второго запроса. Поскольку может быть более 400 элементов, я хочу, чтобы он был максимально эффективным.

Редактировать 2 Я немного ближе, спасибо, но все еще не удаляю элементы из элементов removedespatchitem из сборочных элементов. Я не знаю, почему

public List<AssemblyListItems> RemoveDespatchedItems(List<AssemblyListItems> AssemblyItems, Int64 ProductionPlanId)
{
   using (var db = newLiveEntities())
   {
            List<PalletizedItems> removeDespatchItems = db.PalletizedItems.Where(w => w.Despatched != "Not Despatched" && w.ProductionPlanID == ProductionPlanId).ToList();

            var itemsDocumentNo = db.PalletizedItems.Select(x => x.ProductionPlanItemID).ToList();        
            foreach (var subitem in removeDespatchItems)  {                 

                AssemblyItems.RemoveAll(x => x.ProductionPlanID == subitem.ProductionPlanID && itemsDocumentNo.Contains(x.ProductionPlanItemID) && x.ItemCode == subitem.StockCode && x.LineQuantity==x.AllocatedQuantity);

        }
    }

        return AssemblyItems;
}

1 Ответ

0 голосов
/ 31 октября 2018

Не 100% я получаю именно так, как должно быть.

Однако в целом вы можете использовать join, что приведет к тому, что это будет сделано в базе данных. Примерно так:

var remainingItems = (from ali in db.FUEL_AssemblyListItems
            join completed in db.FuelCompletedPrinteds 
                on new { ali.ProductionPlanID, ali.DocumentNo, ali.ItemCode } equals new { completed.ProductionPlanID, completed.DocumentNo, completed.StockCode }
            join dispatched in db.FUEL_PalletizedItems
                on new { ali.ProductionPlanID, ali.DocumentNo, ali.ItemCode } equals new { dispatched.ProductionPlanID, dispatched.DocumentNo, dispatched.StockCode }
            where (ali.ProductionPlanID == (long) _currentPlan.ProductionPlan
                && ali.DocumentNo == completed.DocumentNo
                && completed.OutstandingToMake == 0
                && dispatched.Despatched != "Not Despatched")
            select ali).ToList();

В зависимости от записей в базе данных объединение может потребовать внешнего объединения, для которого требуется немного другой синтаксис, но, надеюсь, у вас есть отправная точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...