Entity framework IQueryable.选择列表类型sub POCO

Entity framework IQueryable.选择列表类型sub POCO,entity-framework,iqueryable,Entity Framework,Iqueryable,我有一个实体框架模型,其中有一个“Customers”和一个“CustomerPhones”表。一个客户可以有多个电话号码,因此“客户”实体有一组“电话”。我可以毫无问题地查询模型: using (CustomerEntities context = new CustomerEntities()) { Customer customer = context.Customers.FirstOrDefault(); CustomerPhone phone = customer.Pho

我有一个实体框架模型,其中有一个“Customers”和一个“CustomerPhones”表。一个客户可以有多个电话号码,因此“客户”实体有一组“电话”。我可以毫无问题地查询模型:

using (CustomerEntities context = new CustomerEntities())
{
    Customer customer = context.Customers.FirstOrDefault();
    CustomerPhone phone = customer.Phones.FirstOrDefault();

    MessageBox.Show(customer.Name + " " + phone.Number);
}
这个模型对于我需要做的事情来说太复杂了(即使我的示例是基本的),所以我试图将它归结为更简单的POCO。以下是两个简单的类:

public class SimplePhone
{
    public int Id { get; set; }
    public string Number { get; set; }
}

public class SimpleCustomer 
{
    public int Id { get; set; }
    public string Name { get; set; }

    //Phones is a list because a single Customer can have multiple phone numbers
    public List<SimplePhone> Phones { get; set; }
}
公共类SimplePhone
{
公共int Id{get;set;}
公共字符串编号{get;set;}
}
公共类SimpleCustomer
{
公共int Id{get;set;}
公共字符串名称{get;set;}
//电话是一个列表,因为一个客户可以有多个电话号码
公共列表电话{get;set;}
}
我可以使用“IQueryable”的“Select”方法填充对象的简单属性:

使用(CustomerEntities上下文=新CustomerEntities())
{
IQueryable customers=context.customers.Select(
c=>新的SimpleCustomer
{
Id=c.Id,
Name=c.Name
}
);
SimpleCustomer=customers.FirstOrDefault();
MessageBox.Show(customer.Name);
}
所以我的问题很简单:如何填充“Phones”属性,即列表

using (CustomerEntities context = new CustomerEntities())
{
   IQueryable<SimpleCustomer> customers = context.Customers.Select(
           c => new SimpleCustomer
           {
               Id = c.Id,
               Name = c.Name
               Phones = ///????
           }
       );

   SimpleCustomer customer = customers.FirstOrDefault();
   SimplePhone phone = customer.Phones.FirstOrDefault();

   MessageBox.Show(customer.Name + " " + phone.Number);
}
使用(CustomerEntities上下文=新CustomerEntities())
{
IQueryable customers=context.customers.Select(
c=>新的SimpleCustomer
{
Id=c.Id,
Name=c.Name
电话=//????
}
);
SimpleCustomer=customers.FirstOrDefault();
SimplePhone phone=customer.Phones.FirstOrDefault();
MessageBox.Show(customer.Name+“”+phone.Number);
}
如果我不清楚和/或您需要更多详细信息,请告诉我


谢谢

我不确定您的问题是否还有其他问题,但据我所知,您可以调用
ToList
,它将具体化为一个列表:

IQueryable<SimpleCustomer> customers = 
    context.Customers.Select(c => new SimpleCustomer
    {
        Id = c.Id,
        Name = c.Name,
        Phones = c.Phones.Select(p => new SimplePhone 
                 {
                     Id = p.Id, // Unless you want the custom Id, i.e. c.Id
                     Number = p.Number
                 }).ToList();
    });
IQueryable客户=
Select(c=>newsimplecustomer
{
Id=c.Id,
Name=c.Name,
Phones=c.Phones.选择(p=>newsimplephone
{
Id=p.Id,//除非您需要自定义Id,即c.Id
编号=p.编号
}).ToList();
});

是的,就是这样(我现在确实觉得有点愚蠢)。解决方案对我的实际项目不起作用,但至少我可以开始进一步挖掘,知道这是可行的。谢谢@史蒂夫莱利:我们每个人都会这样!
IQueryable<SimpleCustomer> customers = 
    context.Customers.Select(c => new SimpleCustomer
    {
        Id = c.Id,
        Name = c.Name,
        Phones = c.Phones.Select(p => new SimplePhone 
                 {
                     Id = p.Id, // Unless you want the custom Id, i.e. c.Id
                     Number = p.Number
                 }).ToList();
    });