在实体框架中,我想获得一个包含列表的对象,但列表只获得第一个记录。
我有2个对象Sale和Profile,它们与数据库对象不同,我在查询中创建这些对象,例如"选择新的Sale {}"。配置文件对象包含销售类型列表执行查询时,list只获取数据库中的第一条记录。
销售复杂对象
public class Sale
{
public int Id { get; set; }
public string Header { get; set; }
public double Price { get; set; }
}
配置文件复杂对象
public class Profile
{
public int Id { get; set; }
public string Name { get; set; }
public List<Sale> SalesList { get; set; }
}
我使用左连接,因为它应该将此对象插入列表,如果下一个对象为空。
在此查询
Profile profile = (from u in db.USER
join s in db.SALE on u.ID equals s.USER_ID into saleleft
from salej in saleleft.DefaultIfEmpty()
where u.ID == _userId
select new Profile
{
Id = u.ID,
Name = u.NAME,
SalesList= new List<Sale>()
{
salej != null ? new Sale
{
Id=postj.ID,
Header=salej.HEADER,
Price=salej.PRICE
} : null
}.ToList()
}).FirstOrDefault();
我想这可能与FirstOrDefault()方法有关。因此我认为它应该将所有记录都发送到SalesList。如何列出所有记录?有什么想法吗?
提前致谢。
答案 0 :(得分:0)
我认为你需要在这里使用group
。你可以尝试一下,让我知道它是否有效?
// didn't test the code
Profile profile = (from u in db.USER
join s in db.SALE on u.ID equals s.USER_ID into saleleft
where u.ID == _userId
from salej in saleleft.DefaultIfEmpty()
group salej by new { u.ID, u.NAME } into g
select new Profile
{
Id = g.Key.ID,
Name = g.Key.NAME,
SalesList = g.Select( x => new Sale { Id = postj.ID, Header = x.HEADER, Price = x.PRICE }).ToList()
}).FirstOrDefault();
顺便说一下,postj
是什么?