Linq查询过滤表1并从表2中获取计数

时间:2012-01-18 10:21:46

标签: c# .net linq entity-framework entity-framework-4

我有2个表,一个订单和一个产品。订单具有OrderID,OrderName和AccessID,而产品具有ProductID,ProductName和OrderID。这些表有更多字段,但这些与我的问题相关。

所以我想做的是,使用OrderID获取products表中的第一组产品,订单少于8个产品,AccessID为1。

我知道我可以在2个LINQ语句中执行此操作,首先按Orders中的AccessID进行过滤,然后在products表中创建一个循环以获取Count<的第一个实例。 8,但我确信有更好的方法可以做到这一点,可能在1个声明中。

感谢您的帮助和时间

这是我现在提出来的,仍然需要进行测试: -

    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 个答案:

答案 0 :(得分:1)

预编辑

订单和产品之间的关系不应该是多对多的关系吗?

产品应该有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();