アットウィキロゴ

LINQ

クエリ式

  • 基本
    int[] numbers = {1,2,3,4,5};
    var query = from n in numbers where n >= 2 && n <= 4 select n;
    foreach(var a in query) Console.WriteLine(a);
    
  • 文字列から特定の文字を含むデータを取り出す
    string[] str = { "test00", "test01", "test02" }; 
    var query = from s in str where s.Contains("01") select s;
    foreach (var s in query) Console.WriteLine(s); 
    
  • select句におけるデータの加工処理
    int[] price = {100,200,300};
    var query = from n in price select n * 1.05;
    
  • インスタンスのデータを加工
    class Fruit{
      public string code;
      public string name;
      public int price;
    }
    class Program{
      static void Main(string[] args){
         Fruit[] f = { new Fruit(){ code="A110",name="Apple",price=200},
                       new Fruit(){ code="G201",name="Orange",price=150}
                     };
         var query = from n in f select n;
         foreach(var a in query){
                 Console.WriteLine("{0},{1},{2}",a.code,a.name,a.price);
         }
    
  • Selectメソッド内部動作
    public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector) { 
     if (source == null) throw Error.ArgumentNull("source"); 
     if (selector == null) throw Error.ArgumentNull("selector"); 
     return SelectIterator<TSource, TResult>(source, selector); 
    } 
    static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector) { 
     int index = -1; 
     foreach (TSource element in source) { 
      checked { index++; } 
      yield return selector(element, index); 
     } 
    } 
    
最終更新:2015年02月07日 17:11