《ASP.NET 4.0從入門到精通》第3章C# 4.0語言特色,本章討論在C# 4.0語言中許多增強(qiáng)的功能。首先介紹隱式類型聲明,由編譯器根據(jù)上下文進(jìn)行類型推斷,接下來討論使用自動屬性功能簡化編寫重復(fù)性的屬性代碼。對象初始化器可以簡化開發(fā)人員的賦值代碼,接下來討論如何對一個現(xiàn)有類進(jìn)行擴(kuò)展的擴(kuò)展方法。本節(jié)為大家介紹LINQ示例。
3.8.2 LINQ示例(2)
【代碼解析】可以看到這里使用了本章前面介紹的匿名方法特性,from allsales in pdc.sales表示從sales表中查詢資料。select allsales表示查詢所有的字段??雌饋砼cSQL語句正好相反,SQL語句的select則放在開頭。最后綁定到dataGridView1,程序的執(zhí)行結(jié)果如圖3.28所示。
還可以使用where子句為查詢添加條件。雙擊“條件查詢”按鈕,添加如下的代碼:
- 01 private void button1_Click(object sender, EventArgs e)
- 02 {
- 03 PubsDataContext pdc = new PubsDataContext();
- 04 var getsales = from wheresale in pdc.sales
- 05 where wheresale.qty > 20
- 06 select wheresale;
- 07 dataGridView1.DataSource = getsales;
- 08 }
【代碼解析】這段代碼將查詢銷售數(shù)量大于20的銷售記錄。LINQ還可以只查詢指定的字段,而不用查詢所有的字段,并且可以在查詢字段中設(shè)置運(yùn)算表達(dá)式。將上面的代碼改為如下所示:
- 01 private void button1_Click(object sender, EventArgs e)
- 02 {
- 03 PubsDataContext pdc = new PubsDataContext();
- 04 var getsales = from wheresale in pdc.sales
- 05 where wheresale.qty > 20
- 06 // select wheresale;
注釋掉后添轉(zhuǎn)換成如下的代碼- 07 select new
- 08 {
- 09 數(shù)量乘以五=wheresale.qty*5
- 10 };
- 11 dataGridView1.DataSource = getsales;
- 12 }
【代碼解析】這段代碼將只輸出一個字段,并且輸出該字段乘以5之后的結(jié)果。代碼的輸出結(jié)果如圖3.29所示。
6) SQL語言提供了Join語法執(zhí)行多表聯(lián)合查詢,LINQ同樣也提供了Join語法,但是對于具有外鍵約束的多表,可以直接使用嵌套對象的形式進(jìn)行查詢。下面的代碼將查詢titles表和sales表中指定書名的銷售數(shù)量。代碼的輸出結(jié)果如圖3.30所示。
- 01 private void button2_Click(object sender, EventArgs e)
- 02 {
- 03 PubsDataContext pdc = new PubsDataContext();
- 04 var titlesales = from ts in pdc.sales
- 05 select new
- 06 {
- 07 //在這里使用sales嵌套的
titles表來獲取titles表中的title記錄- 08 title=ts.titles.title,
- 09 qty=ts.qty
- 10 };
- 11 dataGridView1.DataSource = titlesales;
- 12 }
如果表與表之間沒有明確的外鍵約束,則可以使用如下的語法進(jìn)行聯(lián)合查詢。代碼將產(chǎn)生與圖3.30相同的查詢結(jié)果。
- 01 private void button2_Click(object sender, EventArgs e)
- 02 {
- 03 PubsDataContext pdc = new PubsDataContext();
- 04 var titlesales = from ts in pdc.sales
- 05 join titlestable in pdc.titles
on ts.title_id equals titlestable.title_id- 06 select new
- 07 {
- 08 titlestable.title,ts.qty
- 09 };
- 10 dataGridView1.DataSource = titlesales;
- 11 }
7) LINQ也提供了聚合操作語法。下面的代碼將分組統(tǒng)計指定書籍名稱的銷售數(shù)量,雙擊“聚合查詢”按鈕,添加如下所示的代碼。這段代碼產(chǎn)生的結(jié)果如圖3.31所示。
- 01 private void button3_Click(object sender, EventArgs e)
- 02 {
- 03 PubsDataContext pdc = new PubsDataContext();
- 04 var titlesales = from ts in pdc.sales
- 05 group ts by new
{ts.titles.title} into gp- 06 select new
- 07 {
- 08 title=gp.Key.title,
- 09 qty=gp.Sum(ts=>ts.qty)
- 10 };
- 11 dataGridView1.DataSource = titlesales;
- 12 }