C# 使用C和导航属性查询实体框架
首先,我对C和EF都是新手 我已经在VS 2015 CE中和模型设计器创建了许多实体,并设置了关系 我想查询实体以返回特定合同的所有客户,例如合同ID=1,以及CustomerLocker和ContractCustomer实体的相关属性(如果存在),如果不存在则返回null。我还有来自合同实体的LockerNumber值,例如100 如果有人能帮助我选择我需要的属性所需的LINQ查询,我将不胜感激。如果可能的话,我希望能够使用导航属性 到目前为止,我可以选择客户,但无法从CustomerLocker实体中选择属性C# 使用C和导航属性查询实体框架,c#,entity-framework,linq-to-sql,linq-to-entities,C#,Entity Framework,Linq To Sql,Linq To Entities,首先,我对C和EF都是新手 我已经在VS 2015 CE中和模型设计器创建了许多实体,并设置了关系 我想查询实体以返回特定合同的所有客户,例如合同ID=1,以及CustomerLocker和ContractCustomer实体的相关属性(如果存在),如果不存在则返回null。我还有来自合同实体的LockerNumber值,例如100 如果有人能帮助我选择我需要的属性所需的LINQ查询,我将不胜感激。如果可能的话,我希望能够使用导航属性 到目前为止,我可以选择客户,但无法从CustomerLock
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
}
)
您可以通过过滤LockerNumber从CustomerLockers获得HasCard
查询
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,
CustomerLockerHasCard = cc.Customer.CustomerLockers
.Where(x => x.LockerNumber == 1000)
.Select(x => x.HasCard)
}
)
此外,我建议您将模型类定义为已知类型,而不是使用匿名类型。一个选项是获取客户列表,而不仅仅是客户编号:
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
}
)
但这更像是一种初学者的方式,请记住,最好在一个查询中获取所需的所有内容,如Stormcloack的答案
这个答案只是告诉你如何挖掘实体这是一个简单的方法。如果你还没有开始编码,你必须遵循课程或教程。如果您已经编写了任何代码,请告诉我们您有多远。请记住:我们不是来为您编写代码的,而是来解决特定问题的。你通过帮助页面了吗?好现在你的问题太宽泛了,但你可以做得更好谢谢你的回答。我将更新我当前的查询。非常感谢您的帮助。我熟悉您显示的选项,但我希望使用更高效的查询。谢谢您的帮助。如何从CustomerLocker实体中选择特定属性,例如锁号为1000的HasCard?@Samuel。。。这是另一个问题,我们不能陪你一起构建你的项目。这一评论可能是另一个问题的候选。记住,一次一个问题。亲爱的Antione Pelletier-这不是另一个问题,因为这正是我在CustomerLocker和ContractCustomer实体的原始问题相关属性中所问的。亲爱的Storm斗篷-您的答案正是我所需要的。非常感谢您的大力协助。
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();
}