LINQ to Objectで抽出と並び替え(配列編)
※この投稿はMicrosoft Visual Studio 2008 Beta2で動作を確認しています。
LINQ to ObjectはListだけを対象にしているわけではありません。
配列もその対象となります。 ということで、ソースコード。
using System;
using System.Linq;
namespace LINQ2
{
class Program
{
static void Main(string[] args)
{
var People = new[]{
new { Name="オサダ トシヒロ", Gender=1, Age=32},
new { Name="カネフジ タカエ", Gender=2, Age=46},
new { Name="キョウゴク トシツグ", Gender=1, Age=11},
new { Name="コウダ キミタカ", Gender=1, Age=17},
new { Name="シモイズミ エイコ", Gender=2, Age=13},
new { Name="センザイ シュウイチロウ", Gender=1, Age=43},
new { Name="ソウリョウ ノリカズ", Gender=1, Age=21},
new { Name="マツバネ タツコ", Gender=2, Age=24},
new { Name="ミツジマ タカコ", Gender=2, Age=32},
new { Name="ヤハタ トシチカ", Gender=1, Age=28}
};
var query = from p in People
where p.Gender == 1 && p.Age >= 20
orderby p.Age
select p;
foreach (var item in query)
{
Console.WriteLine("名前={0}, 年齢={1}", item.Name, item.Age);
}
Console.Read();
}
}
}
なんかデータ作ってるところがすっきりして見えるのは、気のせいではなく、匿名クラスを使っているからです。
まぁ、サンプルだから使える手法ですかね。
LINQの部分はデータがListのときとまったく同じです。
当然、拡張メソッドによる実装も同じく使えます。
var query = People.Where(p => p.Gender == 1 && p.Age >= 20).OrderBy(p => p.Age);
実行結果も同じになります。