.
LINQ 個人認為是一個很方便的功能,可以把複雜的判斷式用簡單的描述即可達成相同效果
如果了解SQL語法就會覺得基本上是一樣的東西,結構上雷同(Select From Where)
只是陳述的順序有點不同,以下直接看範例了解比較快
此範例會隨機產生10個成員的集合,每個成員分別有編號、名稱、職業
然後當按下Query時,會按三種不同條件組合分別呈現從集合中查詢的結果
Source Code
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
-
- namespace LINQTest
- {
- public partial class Form1 : Form
- {
- List<group> _group = new List<group>();
- private string[] _name = new string[]
- "Abigail","Adela","Alexia","Bblythe","Camille","Cornelia",
- "Darlene","Edith","Erica","Eve"};
- private string[] _member_class = new string[] { "magician", "warrior", "Knight" };
-
- public Form1()
- {
- InitializeComponent();
- }
-
- private void Form1_Load(object sender, EventArgs e)
- {
- generate_dropdownList();
- generate_member();
- }
- private void generate_dropdownList()
- {
- for (int i = 0; i <= _name.Length - 1; i++)
- {
- this.comboBox1.Items.Add(new combobox(_name[i], _name[i]));
- }
- this.comboBox1.SelectedIndex = 0;
-
- for (int i = 1; i <= _name.Length; i++)
- {
- this.comboBox2.Items.Add(new combobox(i.ToString(), i.ToString()));
- }
- this.comboBox2.SelectedIndex = 0;
-
- for (int i = 0; i <= _member_class.Length - 1; i++)
- {
- this.comboBox3.Items.Add(new combobox(_member_class[i],
- _member_class[i]));
- }
- this.comboBox3.SelectedIndex = 0;
- }
-
- private void generate_member()
- {
- Random r = new Random();
- for(int i = 1; i<= 10 ; i++)
- {
- group member = new group(); //建立新成員
- member.no = i;
- member.name = _name[r.Next(0,10)];
- member.member_class = _member_class[r.Next(0, 3)];
- _group.Add(member); //將成員加入List中
- richTextBox4.Text += "NO"+member.no+" name: "+member.name+" Class:
- "+member.member_class+"\n";
- }
-
- }
-
- private void query()
- {
- richTextBox1.Text = "";
- richTextBox2.Text = "";
- richTextBox3.Text = "";
- combobox CB1 = (combobox)this.comboBox1.SelectedItem;
- combobox CB2 = (combobox)this.comboBox2.SelectedItem;
- combobox CB3 = (combobox)this.comboBox3.SelectedItem;
-
- var find = from data in this._group //從 _group中尋找data
- where data.name == CB1.value //條件為 name = 輸入值
- select data; //找出資料
- foreach (var item in find)
- {
- richTextBox1.Text += "name:" + item.name + " NO" + item.no +
- "\n" + "========================" + "\n";
-
- }
-
- find = from data in this._group
- where (data.no >= Int32.Parse(CB2.value) && data.name == CB1.value)
- select data;
-
- foreach (var item in find)
- {
- richTextBox2.Text += "name:" + item.name + " NO" + item.no +
- "\n" + "========================" + "\n";
- }
- //從 _group中尋找data
- find = from data in this._group
- //條件為 NO >= 輸入值 且 member_class = 輸入值
- where (data.no >= Int32.Parse(CB2.value) &
- data.member_class == CB3.value)
- //找出資料
- select data;
-
- foreach (var item in find)
- {
- richTextBox3.Text += "name:" + item.name + " NO" + item.no + " Class:" +
- item.member_class +
- "\n" + "========================" + "\n";
-
- }
- }
-
- private void btn_query_Click(object sender, EventArgs e)
- {
- query();
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- richTextBox4.Text = "";
- _group.Clear();
- generate_member();
- }
- }
- }
執行結果
搜索條件1為: 姓名為Abigail 的所有成員
搜索條件2為: 姓名為Abigail 且 編號 大於等於 5 的所有成員
搜索條件3為: 編號大於等於5 且 職業為騎士的成員