【问题标题】:How to use LINQ to retrieve child collection如何使用 LINQ 检索子集合
【发布时间】:2009-06-01 20:54:42
【问题描述】:

从这里开始:

public class Customer
{
  public int CustomerID { get; set; }
  public string CustomerName { get; set; }  
  public IList<Order> Orders { get; set; }
}

public class Order
{
  public int OrderID { get; set; }
  public int CustomerID { get; set; }
}

您编写的用于检索所有客户的所有订单的 linq 查询是什么?

大意是:

IList<Order> orders = new List<Order>();
foreach (Customer c in Customers)
{
    orders.Union(c.Orders);
}

我尝试了以下方法,但它引发了“nhibernate 集合不是关联”异常:

var orders = from c in Customers
             select c.Orders;

我知道我遗漏了一些东西,但我找不到在 linq 中实现这一点的方法。

【问题讨论】:

    标签: linq nhibernate collections


    【解决方案1】:
    var orders = from c in db.Customers
        from o in c.Orders
        select o;
    

    或者

    var orders = db.Customers.SelectMany(c => c.Orders);
    

    它会在 linq 中为 nhibernate 工作吗?我不知道。

    【讨论】:

    • 我也试过了,仍然收到错误:集合不是关联:订单。
    • 确保 nhibernate 知道 Customer 和 Order 之间的关联。我敢打赌,某处有一个需要篡改的 xml 文件。
    • 我一直在尝试使用 nhibernate xml 映射文件,但到目前为止没有成功。我将 实体用于 Customer 对象,将 集合实体用于 Orders。建立关系有不同的方式和事情(键、一对多、外键、复合元素等),有些可以一起工作,但有些不能……我会在我发布一些东西的时候弄清楚这个。感谢您迄今为止的帮助。
    【解决方案2】:

    确保在数据库中从 [Order].[CustomerID] 到 [Customer].[ID] 正确设置了外键约束。

    【讨论】:

    • 我确实在数据库中正确设置了外键关联。如果我使用我在最初的问题中写的循环结构,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多