Linq一對多聯合查詢


問題:

學生表,班級表,我要班級下面學生

A表,字段:AID,CLASS
B表,字段 :BID,BNAME,AID
A表數據
1 班級1
2 班級2
B表數據
1 學生1 1
2 學生2 1 
3 學生3 2
4 學生4 2
我想得到
CLASS NAME
班級1 學生1,學生2
班級2 學生3,學生4
這樣怎么聯合?

 

答案:

namespace ConsoleApplication1
{
    public class A
    {
        public int AID { get; set; }
        public string Class { get; set; }
    }

    public class B
    {
        public int BID { get; set; }
        public string BName { get; set; }
        public int AID { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<A> A = new List<A>() 
            { 
                new A(){ AID = 1, Class="班級1" },
                new A(){ AID = 2, Class="班級2" },
            };

            List<B> B = new List<B>() 
            { 
                new B(){ BID = 1 , BName = "學生1", AID=1 },
                new B(){ BID = 2 , BName = "學生2", AID=2 },
                new B(){ BID = 3 , BName = "學生3", AID=1 },
                new B(){ BID = 4 , BName = "學生4", AID=2 },
            };

            var lastResult = from p in A
                             join q in B.GroupBy(x => x.AID).Select(x => new { Key = x.Key, Value = string.Join(",", B.Where(y => y.AID == x.Key).Select(y => y.BName)) })
                             on p.AID equals q.Key
                             select new
                             {
                                 CLASS = p.Class,
                                 Name = q.Value,
                             };

            foreach (var item in lastResult)
            {
                Console.WriteLine(item);
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM