C# Linq語法(一)
目的:
使用Linq語法,這還滿方便的
有點像SQL語法,用在程式中撈對應的資料
這邊說明用Linq語法撈集合及XML檔案的方式
程式碼:
使用Linq語法,這還滿方便的
有點像SQL語法,用在程式中撈對應的資料
這邊說明用Linq語法撈集合及XML檔案的方式
程式碼:
public partial class Form1 : Form { Listdog = new List (); public Form1() { InitializeComponent(); //先建一個集合 Dog d1 = new Dog("小黃", "黃", "公", 18); dog.Add(d1); dog.Add(new Dog("小白", "白", "母", 15)); dog.Add(new Dog("小花", "花", "母", 25)); dog.Add(new Dog("小哈", "灰", "公", 36)); dog.Add(new Dog("小土", "黃", "公", 24)); dog.Add(new Dog("小黑", "黑", "母", 22)); dog.Add(new Dog("小瑪", "白", "母", 8)); dog.Add(new Dog("小柴", "黃", "公", 18)); dog.Add(new Dog("小雪", "灰", "公", 26)); dog.Add(new Dog("大獒", "黑", "母", 22)); dog.Add(new Dog("小臘", "黑", "公", 42)); dog.Add(new Dog("大黃", "黃", "公", 50)); dog.Add(new Dog("大秋", "黃", "公", 48)); } //------------------------------------------------------------------ private void button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); /* 普通的撈法如下: * for (int i = 0; i < dog.Count; i++) * sb.Append(dog[i]); * * foreach (Dog d in dog) * sb.Append(d); * * 列舉語法,用LINQ來實現類SQL的語法(可供使用者挑選) * IEnumerable result = from d in dog * select d; * * 列舉語法配合var(萬用型別) * 可產生不論選出什麼,都不用管型態為何,再配合foreach更屌 *更可用此法new個匿名類別,讓使用上更為方便 */ var result = from d in dog where d.Sex == "母" && d.Weight >= 20 select new { //匿名類別 petName = d.Name, petColor = d.Color, petSex = d.Sex, petWeight = d.Weight, petIdeaWeight = d.Weight * 0.8 }; foreach (var d in result) sb.Append(d.petName).Append("\t") .Append(d.petColor).Append("\t") .Append(d.petSex).Append("\t") .Append(d.petWeight).Append("\t") .Append(d.petIdeaWeight).Append("\r\n"); textBox1.Text = sb.ToString(); } //------------------------------------------------------------------ private void button2_Click(object sender, EventArgs e) { var result = from d in dog group d by d.Sex into sexGroup select new { Sex = sexGroup.Key, Count = sexGroup.Count(), avgWeight = sexGroup.Average(x => x.Weight) //平均體重,用到lamda的方式(private int Dog d(){return d.weight;}) //簡化成 x => x.Weight 其中x是匿名方法 }; StringBuilder sb = new StringBuilder(); foreach (var d in result) sb.Append(d.Sex).Append("\t") .Append(d.Count).Append("\t") .Append(d.avgWeight).Append("\r\n"); textBox1.Text = sb.ToString(); } //------------------------------------------------------------------ private void button3_Click(object sender, EventArgs e) { //Linq 語法撈出XML中的資料 //XML檔需自行準備 XDocument doc = XDocument.Load(@"C:\資料庫檔\中文北風XML\客戶.xml"); var result = from xx in doc.Descendants("客戶") where xx.Element("地址").Value.StartsWith("台中")//地址是台中開頭的客戶 select new { name = xx.Element("公司名稱").Value, person = xx.Element("連絡人").Value, personJob = xx.Element("連絡人職稱").Value, phone = xx.Element("電話").Value, address = xx.Element("地址").Value }; StringBuilder sb = new StringBuilder(); foreach (var d in result) sb.Append(d.name).Append("\t") .Append(d.person).Append("\t") .Append(d.personJob).Append("\t") .Append(d.phone).Append("\t") .Append(d.address).Append("\r\n"); textBox1.Text = sb.ToString(); dataGridView1.DataSource = result.ToList(); } }
留言
張貼留言