求个多表关联的lamda的写法

dota_sky_god 2015-01-13 03:40:44
有如下三张表 ,ID_A,ID_B,ID_C分别是ABC三张表的主键
表A
ID_A
1
2
3
表B
ID_B ID_A ID_C
a 1 A
b 1 B
c 2 C
d 2 D
e 3 E
表C
ID_C text
A hello
B boy
C good
D job
E see
想要实现的效果如下
ID_A texts
1 hello,boy
2 good,job
3 see
这个用lamda怎么写,求助,用group join写了半天就是获取不到texts
...全文
1238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc1027cc 2015-01-17
  • 打赏
  • 举报
回复
    class Program
    {
        static void Main(string[] args)
        {
            List<ModelA> tableA = new List<ModelA> { 
                new ModelA{ID_A=1},
                new ModelA{ID_A=2},
                new ModelA{ID_A=3},
            };
            List<ModelB> tableB = new List<ModelB>{
                new ModelB{ID_B="a",ID_A=1,ID_C="A"},
                new ModelB{ID_B="b",ID_A=1,ID_C="B"},
                new ModelB{ID_B="c",ID_A=2,ID_C="C"},
                new ModelB{ID_B="d",ID_A=2,ID_C="D"},
                new ModelB{ID_B="e",ID_A=3,ID_C="E"},
            };
            List<ModelC> tableC = new List<ModelC>{
                new ModelC{ID_C="A",text="hello"},
                new ModelC{ID_C="B",text="boy"},
                new ModelC{ID_C="C",text="good"},
                new ModelC{ID_C="D",text="job"},
                new ModelC{ID_C="E",text="see"},
            };

            var result = tableC.Join(tableB, c => c.ID_C, b => b.ID_C, (tA, tB) =>
                new
                {
                    ID_C = tA.ID_C,
                    text = tA.text,
                    ID_A = tB.ID_A,
                }).GroupBy(g => g.ID_A).Select(s=>new {
                ID_A=s.Key,
                texts=string.Join(",",s.Select(se=>se.text)),
            });

            //最后与表一jion。事实。我感觉有点多余
        }


        class ModelA
        {
            public int ID_A { get; set; }
        }
        class ModelB
        {
            public string ID_B { get; set; }
            public int ID_A { get; set; }
            public string ID_C { get; set; }
        }
        class ModelC
        {
            public string ID_C { get; set; }
            public string text { get; set; }
        }
    }
xiaoxiangqing 2015-01-16
  • 打赏
  • 举报
回复
static void Main(string[] args) { List<int> lstA = new List<int>() { 1, 2, 3, 4 }; List<CB> lstB = new List<CB>() { new CB(){ ID_B = "a", ID_A = "1", ID_C="A" }, new CB(){ ID_B = "b", ID_A = "1", ID_C="B" }, new CB(){ ID_B = "c", ID_A = "2", ID_C="C" }, new CB(){ ID_B = "d", ID_A = "2", ID_C="D" }, new CB(){ ID_B = "e", ID_A = "3", ID_C="E" } }; List<CC> lstC = new List<CC>() { new CC(){ ID_C = "A", Text = "hello"}, new CC(){ ID_C = "B", Text = "boy"}, new CC(){ ID_C = "C", Text = "good"}, new CC(){ ID_C = "D", Text = "job"}, new CC(){ ID_C = "E", Text = "see"} }; // ID_A texts //1 hello,boy //2 good,job //3 see var query = lstA.Where(obj => { return lstB.Where(obj2 => Convert.ToInt32(obj2.ID_A) == obj).Count() > 0; } ).Select (obj => { var query3 = from b in lstB join c in lstC on b.ID_C equals c.ID_C where Convert.ToInt32(b.ID_A) == obj select c.Text; string str = string.Join(",", query3); return new { ID_A = obj, texts = str }; } ); foreach (var one in query) { } }‍ class CB { public string ID_B; public string ID_A; public string ID_C; } class CC { public string ID_C; public string Text; }‍
mnxm 2015-01-14
  • 打赏
  • 举报
回复

        static void Main(string[] args)
        {
            
            List<int> lstA = new List<int>() { 1, 2, 3, 4 };
            List<CB> lstB = new List<CB>() { 
                new CB(){ ID_B = "a", ID_A = "1", ID_C="A"  },
                new CB(){ ID_B = "b", ID_A = "1", ID_C="B"  },
                new CB(){ ID_B = "c", ID_A = "2", ID_C="C"  },
                new CB(){ ID_B = "d", ID_A = "2", ID_C="D"  },
                new CB(){ ID_B = "e", ID_A = "3", ID_C="E"  }
            };
            List<CC> lstC = new List<CC>() { 
                new CC(){ ID_C = "A", Text = "hello"},
                new CC(){ ID_C = "B", Text = "boy"},
                new CC(){ ID_C = "C", Text = "good"},
                new CC(){ ID_C = "D", Text = "job"},
                new CC(){ ID_C = "E", Text = "see"}
            };

            lstB.Join(lstC, x => x.ID_C, x => x.ID_C, (x, y) => new { ID_A = x.ID_A, Texts = y.Text }).GroupBy(x => x.ID_A).Select(x => new { ID_A = x.First().ID_A, texts = string.Join(",", x.Select(y => y.Texts)) }).ToList().ForEach(x => Console.WriteLine(x));
            Console.ReadLine();

        }

        class CB
        {
            public string ID_B;
            public string ID_A;
            public string ID_C;
        }

        class CC
        {
            public string ID_C;
            public string Text;
        }
q107770540 2015-01-13
  • 打赏
  • 举报
回复
text直接取你肯定是取不到的,因为group by后,text是一个数组

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧