Вот метод удаления нулевых записей инвентаризации из таблицы инвентаризации. Я хотел бы сократить код / количество раз, которое LINQ
выполняется в базе данных.
Инвентарный стол
public class Inventory
{
public int itemCode { get; set; }
public decimal price { get; set; }
public decimal availQty { get; set; } // Can have Negative values.
}
пример данных
itemCode price availQty
1 10 10
1 12 -10
2 10 10
Из приведенных выше записей я хочу удалить все записи itemCode == 1, поскольку net availableQty равно 0.
Вот мой метод
private void RemoveZeroInvs()
{
// Remove individual zero Inventorys
var rinvs = from ri in _context.Inventorys
where ri.availQty == 0
select ri;
_context.Inventorys.RemoveRange(rinvs);
_context.SaveChanges();
// Remove if group is zero in availQty, as it allows Negative Qty.
var result = from d in _context.Inventorys
group d by new
{
d.itemCode
}
into g
select new
{
g.Key.itemCode,
availQty = g.Sum(y => y.availQty)
};
var zrs = from r in result
where r.availQty == 0
select r;
foreach (var zr in zrs) // Here, zrs length may be more than 500
{
var ri = _context.Inventorys.Where(w => w.itemCode == zr.itemCode);
_context.Inventorys.RemoveRange(ri);
_context.SaveChanges();
}
}
Я использую Asp.Net Core 2.2
. Есть ли такая возможность?
Также я получаю следующую ошибку в строке _context.Inventorys.RemoveRange(ri);
в цикле.
A command is already in progress: SELECT t."itemCode", t."availQty"
FROM (
SELECT d."itemCode", SUM(d."availQty") AS "availQty"
FROM "Inventorys" AS d
GROUP BY d."itemCode"
) AS t