【问题标题】:Child List Element Gets Only 1 Record in Entity Framework子列表元素在实体框架中仅获取 1 条记录
【发布时间】:2017-04-15 22:55:59
【问题描述】:

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

我有 2 个对象 Sale 和 Profile,它们与数据库对象不同,我在查询中创建这些对象,例如“select new Sale { }”。 Profile 对象包含销售类型列表。执行查询时,列表只获取数据库中的第一条记录。

销售复杂对象

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

提前致谢。

【问题讨论】:

  • 因为你创建了一个只有一个元素的列表
  • 我研究了如何填写复杂类型的子列表。因此我使用了这种方式。如何更改我的查询?

标签: entity-framework linq


【解决方案1】:

我认为您需要在这里使用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 是什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多