33. オブジェクト イニシャライザ
• インスタンス化とプロパティ設定を一行で
33
// 1.0~2.0
// プロパティをひとつずつ設定
Point point = new Point();
point.X = 1;
point.Y = 2;
// またはコンストラクタを作成して
Point point = new Point(1, 2);
// 3.0
var point = new Point { X = 1, Y = 2 };
34. コレクション イニシャライザ
• ICollection<T> を配列感覚で初期化
34
// 1.0~2.0
List<Point> list = new List<Point>();
list.Add(new Point(10, 20));
list.Add(new Point( 0, 0));
list.Add(new Point(30, 10));
// 3.0
var list = new List<Point> {
new Point { X = 10, Y = 20 },
new Point { X = 0, Y = 0 },
new Point { X = 30, Y = 10 },
};
48. Linq to Object
•IEnumerable<T> なオブジェクトをクエリ
48
var bookList = new[] {
new { タイトル = "C#入門" , ISBNコード = "AAAAAAA", 価格 = 2980 },
new { タイトル = "VB入門" , ISBNコード = "BBBBBBB", 価格 = 3300 },
new { タイトル = ".NET Framework", ISBNコード = "CCCCCCC", 価格 = 7800 }
};
var books = from aBook in bookList
where aBook.ISBNコード == "BBBBBBB"
select new { タイトル = aBook.タイトル,
価格 = aBook.価格 };
books.ToList().ForEach(item => Console.WriteLine(item));
49. Linq to DataSet
•DataSet をクエリ
49
var ds = new DataSet();
testTableAdapter.Fill(ds);
var accounts = from aBook in ds.Book
where aBook.ISBNコード == "BBBBBBB"
select new { タイトル = aBook.タイトル,
価格 = aBook.価格 };
books.ForEach(item => Console.WriteLine(item));
50. Linq to SQL
•SQL Server のデータベースをクエリ
50
using (var db = new DataClasses1DataContext()) {
var accounts = from aBook in db.Book
where aBook.ISBNコード == "BBBBBBB"
select new { タイトル = aBook.タイトル,
価格 = aBook.価格 };
books.ForEach(item =>
Console.WriteLine(item));
}
54. Linq to Entities
• Entity Framework による
概念エンティティをクエリ
var accounts = from aBook in textContext.Book
where aBook.ISBNコード == "BBBBBBB"
select new { タイトル = aBook.タイトル,
価格 = aBook.価格 };
books.ForEach(item => Console.WriteLine(item));
54
55. Linq to XML
• XML の Xelement をクエリ
– RSS の読み込みなどに便利
55
var xElement = XElement.Load("../../Books.xml");
var books = from aBook in xElement.Elements()
where aBook.Element("ISBNコード
").Value == "BBBBBBB"
select new
{
タイトル = aBook.Attribute("タイトル
").Value,
価格 = int.Parse(aBook.Element("価
格").Value)
};
books.ForEach(item => Console.WriteLine(item));
65. LINQの仕組み
• クエリ式はラムダ式を引数にとる拡張メソッドが連結された形式に
変換される
var query = from book in bookse
where book.タイトル.Contans(“C#”)
orderby book.タイトル
select new { book.タイトル, book.価格 };
var query = books.Where(book => book.タイトル.Contans(“C#”))
.OrderBy(book => book.タイトル)
.Select(book => new {book.タイトル,
book.価格});
65
67. LINQの仕組み
• 遅延実行
– データが実際に必要となるタイミングまでクエ
リ条件が積み重ねられる
• LINQ to SQL では最終的にデータを参照するタイミン
グ (DataBind 時など) にSQL文が生成される
var query1 = from book in db.書籍
orderby book.タイトル
select new { 出版社名 = book.出版社.名前, 書籍タイトル = book.タイトル };
var query2 = from book in query1
where book.出版社名.Contains("C")
select book;
67