【问题标题】:linq query to split nested lists into multiple tables将嵌套列表拆分为多个表的 linq 查询
【发布时间】:2016-10-12 02:55:36
【问题描述】:

我有以下数据结构

List<Items> items = new List<Items>();

    items.Add(new Item() 
    { 
        P1 = "P1",
        P2 = "P2",
        P3 = "P3", 
        P4 = new List<P4> 
        {
            new P4() {T1 = 1, T2 = "test", T3 = 1, T4 = 1},
            new P4() {T1 = 2, T2 = "test", T3 = 2, T4 = 2},
        }

    });

    items.Add(new Item() 
    { 
        P1 = "P11",
        P2 = "P12",
        P3 = "P13", 
        P4 = new List<P4> 
        {
            new P4() {T1 = 3, T2 = "test", T3 = 3, T4 = 1},
            new P4() {T1 = 4, T2 = "test", T3 = 3, T4 = 1},
        }

    });

我有GetData() 方法返回上面的数据结构/数据。

问题

我有三张桌子

Table 1 columns are: P1, P2, P3 
Table 2 columns are: T1 and T2, (P1 FK)
Table 3 columns are: T3, T4 (T1 FK)

我不确定如何转换/拆分上述数据结构来存储它 进上面三个表?

我的尝试

创建一个class.cs

public class DTO
{
  public list<table1> table 1 {get; set;}
}

public class table 1
{
    public string P1 {get; set;}
    public string P2 {get; set;}
    public string P3 {get; set;}
    public list<tabl2> 
}

public class table 2
{
    public string t1 {get; set;}
    public string t2 {get; set;}
    public list<t3>
}

public class table 3
{
    public string t3 {get; set;}
    public string t4 {get; set;}
}

查询 尝试了一些查询但无法成功

Dto dto = new Dto();
var data = GetData();
foreach(item it in data)
{
 dto.table1.add(new table1
{
  p1 = it.p1,
  p2 = it.p2,
  p3 = it.p3
  t1 // not sure how i populate this since it is expecting list 

})

}

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    未打磨的版本。但如下所示:

    var tables = new List<Table1>();
                foreach (var item in items)
                {
                    var t1 = new Table1
                    {
                        P1 = item.P1,
                        P2 = item.P2,
                        P3 = item.P3,
                        Table2s = new List<Table2>()
                    };
    
                    var p4Group = item.P4s.GroupBy(pt => new {pt.T1, pt.T2 });
                    foreach (var p4 in p4Group)
                    {
                        var table2 = new Table2
                        {
                            T1 = p4.Key.T1,T2 = p4.Key.T2, Table3s = new List<Table3>()
                        };
                        var p4S = p4.ToList();
                        foreach (var p4FromGroup in p4S)
                        {
                            table2.Table3s.Add(new Table3
                            {
                                T3 = p4FromGroup.T3,
                                T4 = p4FromGroup.T4
                            });
                        }
    
                        t1.Table2s.Add(table2);
                    }
                    tables.Add(t1);
                }
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您的模型,但我认为一种方法可能类似于

      List<Table1> itemsTable 1 = 
          items.select(i => new Table1() {
              p1 = i.p1,
              p2 = i.p2,
              p3 = i.p3,
              Table2 = i.p4.select(p4 => MapToTable2(p4)).ToList()
          }).ToList();
      
      private Table2 MapToTable2(P4 p4Items){
          return new Table2() {
              t1 = p4.T1,
              t2 = p4.T2
              Table3 = new Table3() {
                  t3 = p4.T3,
                  t4 = p4.T4
              }
          };
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        相关资源
        最近更新 更多