子列表元素只获取实体框架中的1条记录

时间:2017-04-15 12:36:41

标签: entity-framework linq

在实体框架中,我想获得一个包含列表的对象,但列表只获得第一个记录。

我有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。如何列出所有记录?有什么想法吗?

提前致谢。

1 个答案:

答案 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是什么?