Я разрабатываю приложение, в котором у меня есть 2 разных объекта: продукты и тележки для покупок. Каждый товар уникален и имеет уникальный идентификатор. Я хочу добавить товар, которого еще нет в другой корзине и который не продан в корзину.
Упрощенный объект продукта:
public class Products
{
public int Id { get; set; }
public string Name{ get; set; }
public bool Sold { get; set; }
}
Корзина покупок упрощена:
public class ShoppingCarts
{
public int Guid Guid { get; set; }
public int ProductId { get; set; }
}
Итак, сначала я получаю все Product.Id, а затем добавляю их в свою корзину. Мой метод выглядит так:
private IQueryable GetAvailableProductId(int quantity)
{
var query = (from p in _context.Set()
join sc in _context.Set() on p.Id equals sc.ProductId into subset
from sc in subset.DefaultIfEmpty()
where !p.Sold && sc == null
select p).Take(quantity);
return query;
}
По какой-то причине время от времени в разные корзины добавляются 2 объекта с одинаковым ProductId. Это позволяло приложению продавать 2 одинаковых продукта. В итоге я исправил это, выполнив еще одну проверку в приложении, прежде чем совершить транзакцию.
Недавно я пересматривал код и наткнулся на следующие сообщения Запрос LINQ :Определение наличия объекта в одном списке в другом на основе ключа LINQ to Entity, объединение таблиц NOT IN
Мой вопрос в том, предотвратит ли изменение моего запроса что-то подобное двойное добавление.
private IQueryable NewGetAvailableProductId(int quantity)
{
var query = (from p in _context.Set()
where !_context.Set().Any(x => x.ProductId == p.Id) && !p.Sold
select p).Take(quantity);
return query;
}
Если есть сомнения,пожалуйста, дайте мне знать, чтобы я мог объяснить это лучше.
Спасибо,