Entity framework IQueryable.选择列表类型sub POCO
我有一个实体框架模型,其中有一个“Customers”和一个“CustomerPhones”表。一个客户可以有多个电话号码,因此“客户”实体有一组“电话”。我可以毫无问题地查询模型: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
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();
});