我正在尝试使用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.
}
答案 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;
...
}
}