【问题标题】:How can I join two entities using Linq如何使用 Linq 加入两个实体
【发布时间】:2020-04-18 02:45:46
【问题描述】:

我有两个模型 RP 和 RPHistory 如下所示,它们都包含相同的数据,我如何将它们结合起来从两者中创建单个列表数据?

 public class RP: 
    {
        public int ID { get; set; }
        public int RPID { get; set; }
        public string Name { get; set; }
        public int ProductID { get; set; }
    }

我有第二个模态

 public class RPHistory: 
    {
        public int ID { get; set; }
        public int RPID { get; set; }
        public string Name { get; set; }
        public int ProductID { get; set; }
    }

我有这段代码可以从 RP 获取数据:

var RPs = await Context.RP.Where(b => b.ProductID  == request.ID).ToListAsync();

如何加入更新上述代码以包含 RPHistory?

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    尝试以下方式:

    var RPs = await Context.RP.Where(b => b.ProductID  == request.ID)
                              .Select(x=> new {
                                               x.ID, 
                                               x.RPID, 
                                               x.Name, 
                                               x.ProductID, 
                                               History = Context.RPHistory
                                                                .Where(y=> y.RPID == x.RPID)
                                                                .ToList() //Note nested Select 
                                                                          //assuming List and 
                                                                          //there can be more 
                                                                          //than one entry
                                               }
                                      ).ToListAsync();
    

    编辑:

    如果你想要一个具体的类,就这样做:

    public class RpWithHistory {
      public int ID;
      public int RPID;
      public string Name;
      public int ProductID;
      public List<RPHistory> History;
    }
    
    // Then in your code:
    
    var RPs = await Context.RP.Where(b => b.ProductID  == request.ID)
                                  .Select(x=> new RpWithHistory {
                                                   ID = x.ID, 
                                                   RPID = x.RPID, 
                                                   Name = x.Name, 
                                                   ProductID = x.ProductID, 
                                                   History = Context.RPHistory
                                                                    .Where(y=> y.RPID 
                                                                            == x.RPID)
                                                                    .ToList()
                                                   }
                                          ).ToListAsync();
    

    【讨论】:

    • 马特,谢谢!我使用 Automapper 进行映射作为 var rpDTOs = Mapper.Map>(RPs );我得到异常错误映射类型:List1 -&gt; IList1。但这就是我想要的`
    • Matt,我们可以将嵌套选择转换为 Ilist 吗?
    • 如果我没记错我的 CS 可能会因为协方差。看到这个stackoverflow.com/questions/9005944/…
    • Matt,现在我知道当我从数据库中获取记录时,select 语句将其转换为匿名类型,而 Automapper 不知道如何转换。我们可以解决这个问题吗?
    • 我对 automapper 了解不多,这是另一个我不确定的问题
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多