Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C和导航属性查询实体框架_C#_Entity Framework_Linq To Sql_Linq To Entities - Fatal编程技术网

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

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

首先,我对C和EF都是新手

我已经在VS 2015 CE中和模型设计器创建了许多实体,并设置了关系

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

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

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

    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();
}