内容は、「ID、値段、価格」の3つの値を持つクラスのインスタンスを要素に持つ価格リストからデータを抽出して表示するというもの。
≪クラス PriceListElement≫
using System; namespace LINQMySample { public class PriceListElement { public int ID { get; set; } public string Name { get; set; } public int Price { get; set; } public PriceListElement(int id, string name, int price) { this.ID = id; this.Name = name; this.Price = price; } public override string ToString() { return ID + ", " + Name + ", " + Price; } } }
≪画面 Form1≫
≪クラス Form1≫
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace LINQMySample { public partial class Form1 : Form { private List<PriceListElement> priceList; public Form1() { InitializeComponent(); this.priceList = new List<PriceListElement>(); this.priceList.Add(new PriceListElement(1,"apple", 120)); this.priceList.Add(new PriceListElement(2,"orange", 88)); this.priceList.Add(new PriceListElement(3,"water melon", 250)); this.priceList.Add(new PriceListElement(4, "melon", 500)); this.dataGridView1.DataSource = priceList; } private void btnAll_Click(object sender, EventArgs e) { // 全件表示 this.dataGridView1.DataSource = priceList; } private void btn100OverLinq_Click(object sender, EventArgs e) { // LINQクエリ式で価格が100円以上のデータを抽出して表示 var result = from element in this.priceList where element.Price >= 100 select new PriceListElement(element.ID, element.Name, element.Price); this.dataGridView1.DataSource = result.ToList(); } private void btnMelonLinq_Click(object sender, EventArgs e) { // LINQクエリ式で名前に「melon」を含むデータを抽出して表示 var result = from element in this.priceList where element.Name.Contains("melon") select new PriceListElement(element.ID, element.Name, element.Price); this.dataGridView1.DataSource = result.ToList(); } private void btn100OverLambda_Click(object sender, EventArgs e) { // ラムダ式で価格が100円以上のデータを抽出して表示 var result = this.priceList.Where(element => element.Price >= 100); this.dataGridView1.DataSource = result.ToList(); // ↓こう書いてもいい。 // なんならnew のところを変えればPriceListElement以外のクラスを要素に持つiteratorが得られる。 //var result0 = this.priceList.Where(element => element.Price >= 100) // .Select(element => new PriceListElement(element.ID, element.Name, element.Price)); } private void btnMelonLambda_Click(object sender, EventArgs e) { // ラムダ式で名前に「melon」を含むデータを抽出して表示 var result = this.priceList.Where(element => element.Name.Contains("melon")); this.dataGridView1.DataSource = result.ToList(); } } }
Visual C# 2010 Express Editionで作ってます。