Linq Query для фильтрации таблицы 1 и подсчета из таблицы 2 - PullRequest
0 голосов
/ 18 января 2012

У меня есть 2 таблицы, один заказ и один продукт. Заказы имеют OrderID, OrderName и AccessID, в то время как Продукты имеют ProductID, ProductName и OrderID. В этих таблицах есть больше полей, но они подходят для моей проблемы.

Итак, я хочу получить первый набор продуктов в таблице продуктов с их идентификатором OrderID, в котором заказ содержит менее 8 продуктов, а AccessID равен 1.

Я знаю, что могу сделать это в 2 операторах LINQ, сначала отфильтровать по AccessID в Orders, а затем создать цикл в таблице продуктов, чтобы получить первый экземпляр Count <8, однако я уверен, что есть лучший способ сделать это, возможно, в 1 заявлении. </p>

Спасибо за вашу помощь и время

Это то, что я придумал на данный момент и все еще должен быть проверен: -

    public Order OrdersLessThanEightItems()
    {
        IEnumerable<int> orderId = null;
        int accessID = 1;

        Order order = (from o in db.Orders
                                     where o.AccessID == accessID && o.Products.Count < 8                                         
                                     orderby o.Products.Count ascending 
                                     select o).FirstOrDefault();
        return order;
    }

1 Ответ

1 голос
/ 18 января 2012

Pre Edit

Разве отношения между заказами и продуктами не должны быть отношениями много-много?

Должен ли продукт иметь OrderID?Тогда 1 товар может быть только в 1 заказе.

Редактировать сообщение (после выделения отношения 1 ко многим)

public class Product 
{
   //...
   public Order InOrder { get; set; }
   //...
}

public class Order
{
   //...
   public virtual ICollection<Product> ProductsInOrder { get; set; }
   //...
}

Тогда вы сможете использовать это (не проверено):

List<Product> productList = (from o in context.Orders
                             where o.AccessID == myAccessID && o.ProductsInOrder.Count < 8
                             orderby o.ProductsInOrder.Count
                             select o).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...