1

我正在尝试使用 linq to sql 对名为 Customers 的父实体执行简单的选择,该实体在我的 dbml 设计器中与名为 Projects 的实体具有一对多的关系。

通过连接,我可以访问两个实体的列属性:

using (DataClasses1DataContext DbContext = new DataClasses1DataContext())
            {
                var query2 = DbContext.Customers
                    .Join(DbContext.Projects, c => c.CustomerID, p => p.CustomerID,
                    (c, p) => new
                    {
                        c.Email,
                        p.Customer
                    });
            }

但是,在简单选择期间(使用任何 query1、2 或 3 变量),我不知道为什么延迟加载不显示 Projects 实体的任何列属性(使用智能感知)。我知道 query1 和 query2 会返回列表,而 query3 只会返回一条记录。

如何正确使用延迟加载并访问 Project 子实体中的列属性?

另外,如果我可以通过延迟或急切加载访问那些相同的子列,为什么要在相关实体上使用 JOIN?

using (DataClasses1DataContext DbContext = new DataClasses1DataContext())
            {
                //var dataLoadOptions = new DataLoadOptions();
                //DbContext.LoadOptions.LoadWith<Customer>(n => n.Projects);

                //var query1 = DbContext.Customers.Where(c => c.CustomerID > 0);

                //var query2 = DbContext.Customers.Where(c => c.CustomerID > 0).Select(c => new { c.CustomerID, c.Projects });

                var query3 = DbContext.Customers.Where(c => c.CustomerID == 1).FirstOrDefault();

                query3.Projects.
            }

编辑 #1: var query1 = DbContext.Customers.Where(c => c.CustomerID > 0);

            foreach (var c in query1)
            {
                c.Projects.
            }
4

1 回答 1

1

单个对象是 Customer,但 Projects 是一个集合,而不是单个 Project 对象。

更新

var query1 = DbContext.Customers.Where(c => c.CustomerID > 0);

foreach (var c in query1)
{
    foreach(var p in c.Projects)
    {
         int id = p.CustomerID;
         ...
    }
}
于 2013-03-10T19:31:45.560 回答