使用C#和导航属性查询实体框架

时间:2018-01-19 14:51:08

标签: c# entity-framework linq-to-sql linq-to-entities

首先,我是C#和EF的新手。

我在VS 2015 CE中使用模型设计器创建了许多实体并设置了关系。

我想查询实体以返回特定合同的所有客户(例如Contract_ID = 1),以及来自CustomerLocker和ContractCustomer实体的相关属性(对于CustomerLocker实体,如果它们存在,则返回null;如果它们存在,则返回null不是)。我还有来自Contract实体的LockerNumber值(例如100)。

如果有人可以帮助选择我需要的属性所需的LINQ查询,我将不胜感激。如果可能的话,我希望能够使用导航属性。

到目前为止,我可以选择客户,但无法从CustomerLocker实体中选择属性。

finalLayout

entities shown in VS Model Designer

2 个答案:

答案 0 :(得分:1)

您可以通过HasCard过滤来获得CustomerLockers的{​​{1}};

LockerNumber

查询;

CustomerLockers = cc.Customer.CustomerLockers

另外,我建议您将模型类定义为已知类型,而不是使用匿名类型。

答案 1 :(得分:0)

选项是获取客户列表而不仅仅是客户编号:

var myCustomers = (from cc in context.ContractCustomers
where cc.Contract_ID.Equals(contractID)
select new
{
    Licencee = cc.IsLicencee,
    Added = cc.AddedDate,
    Firstname = cc.Customer.FirstName,
    Lastname = cc.Customer.LastName,
    DOB = cc.Customer.DateOfBirth,
    Postcode = cc.Customer.PostCode,
    CustomerNumber = cc.CustomerNumber,
    listOfCustomers = cc.Customer.ToList() // <-Here, a list
}
)

然后你可以使用循环:

foreach(var customer in myCustomers.listOfCustomers)
{
    var listOfLockers = customer.CustomerLockers.ToList();
}

但这更像是一个初学者的方式,记住在一个查询中拿出你需要的东西总是更好,比如Stormcloack的答案。

这个答案只是为了向您展示如何以简单的方式挖掘实体。