【问题标题】:Linq Query to filter Table 1 and get count from Table 2Linq Query 过滤表 1 并从表 2 中获取计数
【发布时间】:2012-01-18 10:21:45
【问题描述】:

我有 2 张桌子,一张订单和一张产品。 Orders 有 OrderID、OrderName 和 AccessID,而 Products 有 ProductID、ProductName 和 OrderID。这些表有更多字段,但这些是与我的问题相关的字段。

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

我知道我可以在 2 条 LINQ 语句中做到这一点,首先在 Orders 中按 AccessID 进行过滤,然后在 products 表中创建一个循环以获取 Count

感谢您的帮助和时间

这是我现在想出的,仍然需要测试:-

    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;
    }

【问题讨论】:

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


    【解决方案1】:

    预编辑

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

    产品应该有 OrderID 吗?那么 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();
    

    【讨论】:

    • Hi The Power,在我的例子中,它是一对一的关系,即一个产品在任何时候都只能是一个订单。
    • @Johann 如果是一对一的关系,订单中的产品永远不会超过 1 个。
    • 对不起,我的意思是,如果一个产品在一个订单中,那么该产品不能在另一个订单中,所以它在订单和产品之间是一对多。我想出了一些仍然需要测试的东西,并将编辑我的问题
    • @Johann 我已更改代码以匹配您的一对多关系。
    • 您好电源我实际上使用了您的第一个示例,因为它工作得更好,但是我仍然有一个小问题。例如,如果订单 1 有 2 件商品,订单 2 有 4 件商品,我想检索订单 2,它的商品数量少于 8。您可以在这篇文章中看到我的新代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多