LINQ to Sql系列二 簡單查詢和聯接查詢


這一篇文章主要總結LINQ to sql的簡單查詢(單表查詢)和聯接查詢(多表查詢)

單表查詢

需求是我們要輸出TClass表中的結果。使用了from…in…select語句,代碼如下:

public static void SimpleQuery()
        {
            using (L2SDBDataContext db = new L2SDBDataContext())
            {
                var query = from tc in db.TClasses
                            //select tc;
                            select new { 
                                ClassID=tc.ClassID,
                                ClassName=tc.ClassName
                            };
                Console.WriteLine("output results for table of class");
                int i = 1;
                foreach (var item in query)
                {
                    Console.WriteLine("{0},ClassID:{1},ClassName:{2}",i,item.ClassID,item.ClassName);
                    i++;
                }
            }
        }

注意:這里沒有用select tc,而是定義了一個新的匿名類型是因為性能的考慮,后面性能優化的部分會講到。

輸出結果:

l2s06

多表查詢

多表查詢,也可以稱為聯接查詢,需要通過外鍵聯接多張表才能查詢到我們想要的結果,現在的需求是某個班級及這個班級相關學生的信息。實現這個需求有兩種方法,一種是內聯接,另一種方法是外聯接,下面是通過內聯接查詢的代碼。

public static void Query_InnerJoin()
        {
            using (L2SDBDataContext db = new L2SDBDataContext())
            {
                var query = from s in db.TStudents
                            join c in db.TClasses on s.ClassID equals c.ClassID
                            where s.ClassID == 3
                            select new
                            {
                                ClassID = s.ClassID,
                                ClassName = c.ClassName,
                                Student = new
                                {
                                    Name = s.Name,
                                    StudentID = s.StudentID
                                }
                            };

                foreach (var item in query)
                {
                    Console.WriteLine("{0} {1} {2}", item.ClassID, item.ClassName, item.Student.Name);
                }    
            }
        }

運行結果:

l2s07

外聯接代碼:

public static void Query_OutJoin()
        {
            using (L2SDBDataContext db = new L2SDBDataContext())
            {
                var query = from s in db.TStudents
                            join c in db.TClasses on s.ClassID equals c.ClassID into gc
                            from gci in gc.DefaultIfEmpty()
                            where s.ClassID == 3
                            select new
                            {
                                ClassID = s.ClassID,
                                ClassName = gci.ClassName,
                                Student = new
                                {
                                    Name = s.Name,
                                    StudentID = s.StudentID
                                }
                            };

                foreach (var item in query)
                {
                    Console.WriteLine("{0}, {1} [{2}]", item.ClassID, item.ClassName, item.Student.Name);
                }
            }
        }

注意:outer join時必須將join后的表into到一個新的變量中,然后調用這個對象的DefaultIfEmpty方法。

運行結果與內聯接相同。


免責聲明!

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



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