linq到sql延迟加载不起作用

时间:2013-03-10 19:20:53

标签: .net linq-to-sql lazy-loading

我正在尝试使用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实体的任何列属性(使用intellisense)。 我知道query1& query2将返回列表,query3只返回一条记录。

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

另外,如果我可以使用Lazy或Eager加载访问那些相同的子列,为什么在相关实体上使用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 =&gt; c.CustomerID&gt; 0);

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

1 个答案:

答案 0 :(得分: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;
         ...
    }
}