C((zhi LIQ)の基本的な使い方例


LINEは何ですか?
LINE QはLanguage Integrated Query(言語統合クエリの略語)であり、マイクロソフトはその記述を説明する。
言語統合クエリ(LINQ)は、照会機能を直接C(嚖言語)に統合した一連の技術を総称しています。
基本的な使い方は何ですか?
(今は基本的な使い方しかできません。)
LINEクエリの操作は三つの異なる操作で構成されています。
  • データソース
  • を取得する。
  • クエリーを作成する
  • クエリーの実行
  • 私が勉強する時に使う小さな例を使ってデモします。
    二つのデータソースがあります。武林の達人の集合と武林の絶学の集合です。
    私は二つの集合を使っていますが、実際には集合だけでなく、データソースとして利用できます。
    マイクロソフトの公式文書によると、
    上記の例では、データソースは1つの配列であり、したがって、一般的なIEnumerable<T>インターフェースを暗黙的にサポートする。この事実は、データソースがLINEで照会できることを意味する。
    私の例を言えば、二つの種類が実現されました。
    MatialArtsMasterは武術界の達人を表しています。
    
    //    
    class MatialArtsMaster
    { 
     public int ID { get; set; }
     public string Name { get; set; }
     public int Age { get; set; }
     public string Menpai { get; set; }
     public string Kongfu { get; set; }
     public int Level { get; set; }
     public override string ToString()
     {
      return string.Format("id:{0},name:{1},age:{2},menpai:{3},kongfu:{4},level:{5}", this.ID, this.Name, this.Age, this.Menpai, this.Kongfu, this.Level);
     }
    }
    Kongfuは武林の絶学を表しています。
    
    //  
    class Kongfu
    {
     public int Id { get; set; }
     public string Name { get; set; }
     public int Power { get; set; }
     public Kongfu() { }
     public Kongfu(int id, string name, int power)
     {
      Id = id;
      Name = name;
      Power = power;
     }
     public override string ToString()
     {
      return string.Format("Id:{0},Name:{1},Power:{2}", this.Id, this.Name, this.Power);
     }
    }
    次に二つのセットを塗りつぶします。
    
    {
       var MasterList = new List<MatialArtsMaster>
       {
        new MatialArtsMaster(){ID=001,Name="  ",Age=18,Menpai="  ",Kongfu="    ",Level=9},
        new MatialArtsMaster(){ID=002,Name="   ",Age=70,Menpai="  ",Kongfu="    ",Level=10},
        new MatialArtsMaster(){ID=003,Name="  ",Age=22,Menpai="  ",Kongfu="     ",Level=10},
        new MatialArtsMaster(){ID=004,Name="   ",Age=50,Menpai="  ",Kongfu="    ",Level=1},
        new MatialArtsMaster(){ID=005,Name="    ",Age=35,Menpai="  ",Kongfu="    ",Level=10},
        new MatialArtsMaster(){ID=006,Name="   ",Age=23,Menpai="  ",Kongfu="    ",Level=7},
        new MatialArtsMaster(){ID=007,Name="   ",Age=50,Menpai="  ",Kongfu="   ",Level=8},
        new MatialArtsMaster(){ID=008,Name="   ",Age=23,Menpai="  ",Kongfu="    ",Level=10},
        new MatialArtsMaster(){ID=009,Name="   ",Age=23,Menpai="   ",Kongfu="    ",Level=8},
       };
       var kungfuList = new List<Kongfu>()
       {
        new Kongfu(){Id=1,Name="    ",Power=90},
        new Kongfu(){Id=2,Name="     ",Power=95},
        new Kongfu(){Id=3,Name="    ",Power=100},
        new Kongfu(){Id=4,Name="    ",Power=100},
        new Kongfu(){Id=5,Name="    ",Power=100},
       };
    続いて検索します。基本的なLINQクエリの操作は主にfrom、in、select、whereキーワードによって実現されます。たとえば:
    ひまわりの花の宝典を修練する武術界の達人を調べます。
    
    var res = from master in MasterList
         where master.Kongfu == "    "
         select master;
      foreach(var temp in res)
      {
       Console.WriteLine(temp.ToString());
      }
      //id: 4,name:    ,age: 50,menpai:   ,kongfu:     ,level: 1
      //id: 5,name:     ,age: 35,menpai:   ,kongfu:     ,level: 10
      //id: 6,name:    ,age: 23,menpai:   ,kongfu:     ,level: 7
    武林の達人の名前を調べます。
    
    var res = from master in MasterList
         select master.Name;
      foreach(var temp in res)
      {
       Console.WriteLine(temp.ToString());
      }
      //  
      //   
      //  
      //   
      //    
      //   
      //   
      //   
      //   
    マイクロソフトの公式はfromキーワードの後のその変数を範囲変数と呼びます。
    範囲変数はforeachサイクルの反復変数のようですが、クエリー式では本当に反復が発生しません。クエリーを実行すると、範囲変数は、customers内の各連続要素の参照として作用します。
    この書き方はSQL文とよく似ています。論理機能も基本的に同じですので、SQLができたら分かりやすいです。
    拡張方法
    このような標準的な書き方の他に、データソースの拡張方法によってLINEクエリを実現することができます。一番わかりやすい方法はwhere()です。
    すべての修練レベルが8より大きい武術界の達人を調べたい場合:
    
    var res = MasterList.Where(master => master.Level > 8);
      foreach(var temp in res)
      {
       Console.WriteLine(temp.ToString());
      }
      //id: 1,name:   ,age: 18,menpai:   ,kongfu:     ,level: 9
      //id: 2,name:    ,age: 70,menpai:   ,kongfu:     ,level: 10
      //id: 3,name:   ,age: 22,menpai:   ,kongfu:      ,level: 10
      //id: 5,name:     ,age: 35,menpai:   ,kongfu:     ,level: 10
      //id: 8,name:    ,age: 23,menpai:   ,kongfu:     ,level: 10
    拡張方法はまだたくさんあります。Select、SelectMany、Join、Orderbyなどです。彼らの具体的な使い方はマイクロソフト公式文書-拡張方法を参照してください。
    を選択します。
    最後に
    LINQは強力な技術です。私はLINQの知識を少しだけ理解しました。勉強を続けるのが長続きの道です。
    締め括りをつける
    ここで、Cの基本的な使い方について紹介します。Cの基本的な使い方については、以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。