【问题标题】:Linq Group Join Items into ListLinq Group 将项目加入列表
【发布时间】:2014-08-13 14:07:24
【问题描述】:

这是一个主细节场景,其中每个 TABLE1 都分配了来自 TABLE2 的多行,我想做一些这样的事情:

From a In TABLE1
Group Join c In TABLE2 On c.ID2 Equals a.ID Into Group
Select New ViewModel1 With {
    .COLUMN1 = a.COLUMN1,
    .COLUMN2 = a.COLUMN2,
    .SUBTABLE = New ViewModel2 With {
        .SUBCOLUMN1 = c.SUBCOLUMN1,
        .SUBCOLUMN2 = c.SUBCOLUMN2,
    }
}

这有可能吗?

【问题讨论】:

    标签: entity-framework linq join linq-group


    【解决方案1】:

    你是这个意思吗:

            var foobars = from foo in foolist
                          join bar in barlist on foo.Fooo equals bar.FooBar into t
                          select new
                          {
                              foo.Baar,
                              barbar = from bar in t
                                       select new { bar.FooBar, bar.BarFoo }
                          };
    

    这将是(大约)您执行您描述的查询的方式。

    抱歉,我不得不重新阅读这个问题几次才能知道它被映射到第一个元素。

    【讨论】:

    • 子表包含分配给其父级的多行,因此我需要您示例中的 barbar 来容纳所有这些子级。
    • 是的,我后来意识到了。现在怎么样了,barbar 是一个匿名类型的 IEnummerable。如果你需要它是一个列表或任何其他格式,我也可以为你做。您也可以只为 t 分配一个变量(它也是 bar 类型的 IEnummerable)。
    【解决方案2】:

    也许以下内容可以帮助您:

    class Program
    {
        public class A
        {
            public int ID { get; set; }
            public string COLUMN1 { get; set; }
            public string COLUMN2 { get; set; }
        }
    
        public class B
        {
            public int ID { get; set; }
            public int AID { get; set; }
            public string SUBCOLUMN1 { get; set; }
            public string SUBCOLUMN2 { get; set; }
        }
    
        static void Main(string[] args)
        {
            var listA = new List<A>{
                new A() { ID = 1, COLUMN1="COLUMN11",COLUMN2 = "COLUMN12"}, 
                new A() { ID = 2 ,COLUMN1="COLUMN21",COLUMN2 = "COLUMN22"}
            };
    
            var listB = new List<B>()
            {
                new B(){ID=1,AID = 1 },
                new B(){ID=2,AID = 1},
                new B(){ID=3,AID = 1},
                new B(){ID=4,AID = 2},
                new B(){ID=5,AID = 2}
            };
    
            //Group Join As Method Chain:
            var queryAsMethodChain = listA.GroupJoin(listB, a => a.ID, b => b.AID, (a, t) => new
            {
                ID = a.ID,
                COLUMN1 = a.COLUMN1,
                COLUMN2 = a.COLUMN2,
                SUBTABLE = t.Select(tt => new { tt.SUBCOLUMN1, tt.SUBCOLUMN2 })
            });
    
    
            //Group Join As Standard Method
            var queryAsStandardMethod = from a in listA
                                      join b in listB
                                      on a.ID equals b.AID into t
                                      select new
                                      {
                                          ID = a.ID,
                                          COLUMN1 = a.COLUMN1,
                                          COLUMN2 = a.COLUMN2,
                                          SUBTABLE = t.Select(tt => new { tt.SUBCOLUMN1, tt.SUBCOLUMN2 })
                                      };
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多