Help us understand the problem. What is going on with this article?

C# LINQメソッド百科事典

要素の取得(単一)

該当の要素が無い場合
  OrDefaultを付けていないメソッドは例外をスローする
  OrDefaultを付けたメソッドは型の既定値を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.ElementAtOrDefault(8);
// -> 0

ElementAt

指定した位置(インデックス)にある要素を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.ElementAt(2);
// -> 52

First

条件に合う最初の要素を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.First(e => e > 15);
// -> 16

Last

条件に合う最後の要素を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Last(e => e > 15);
// -> 21

Single

唯一の要素を返す
該当する要素が複数ある場合例外をスローする

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Single(e => e > 50);
// -> 52

  

要素の取得(複数)

Where

条件を満たす要素を全て返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Where(e => e > 20);
// -> {52, 21}

Distinct

重複を除いたシーケンスを返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Distinct();
// -> {11, 16, 52, 21, 8}

Skip

先頭から指定された数の要素をスキップし、残りのシーケンスを返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Skip(3);
// -> {21, 8, 8}

SkipWhile

先頭から指定された条件を満たさなくなるまで要素をスキップし、残りのシーケンスを返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Skip(e => e < 20);
// -> {52, 21, 8, 8}

Take

先頭から指定された数の要素を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Take(3);
// -> {11, 16, 52}

TakeWhile

先頭から指定された条件を満たす要素を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.TakeWhile(e => e < 20);
// -> {11, 16}

  

集計

Max

最大値を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Max():
// -> 52

Min

最小値を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Min():
// -> 8

Average

平均値を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Average();
// -> 19.3333333333333

Sum

合計値を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Sum();
// -> 116

Count

要素数を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Count();
// -> 6

Aggregate

アキュムレータ関数で処理した結果を返す

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Aggregate((now, next) => now + next); //やっている事はSUMと同じ
// -> 116

  

判定

All

全ての要素が条件を満たしているか判定

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.All(e => e > 10);
// -> False

Any

条件を満たす要素が含まれているか判定

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Any(e => e > 10);
// -> True

Contains

指定した要素が含まれているか判定

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.Contains(20);
// -> False

SequenceEqual

2つのシーケンスが等しいかどうか判定

var source = new[] { 11, 16, 52, 21, 8, 8 };
var output = source.SequenceEqual(new[] { 11, 16, 21, 52, 8, 8});
// -> False

  

集合

Union

指定したシーケンスとの和集合を返す

var first = new[] { 11, 16, 52, 21, 8, 8 };
var second = new[] { 16, 21, 20, 3 };
var output = first.Union(second);
// -> {11, 16, 52, 21, 8, 20, 3}

Except

指定したシーケンスとの差集合を返す

var first = new[] { 11, 16, 52, 21, 8, 8 };
var second = new[] { 16, 21, 20, 3 };
var output = first.Except(second);
// -> {11, 52, 8}

Intersect

指定したシーケンスとの積集合を返す

var first = new[] { 11, 16, 52, 21, 8, 8 };
var second = new[] { 16, 21, 20, 3 };
var output = first.Intersect(second);
// -> {16, 21}

  

ソート

OrderBy

昇順にソートしたシーケンスを返す

var source = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var output = source.OrderBy(e => e.Version);
// -> {{ Name = C#, Version = 7 },
//     { Name = PHP, Version = 7 },
//     { Name = Java, Version = 9 },
//     { Name = C++, Version = 17 }}

OrderByDescending

降順にソートしたシーケンスを返す

var source = new[] {
    new{ Name = "C#", Version = 7 },
    new{ Name = "C++", Version = 17 },
    new{ Name = "Java", Version = 9 },
    new{ Name = "PHP", Version = 7 },
};
var output = source.OrderByDescending(e => e.Version);
// -> {{ Name = C++, Version = 17 },
//     { Name = Java, Version = 9 },
//     { Name = C#, Version = 7 },
//     { Name = PHP, Version = 7 }}

ThenBy

ソートしたシーケンスに対し、キーが等しい要素同士を昇順にソートしたシーケンスを返す

var source = new[] {
    new{ Name = "C#", Version = 7 },
    new{ Name = "C++", Version = 17 },
    new{ Name = "Java", Version = 9 },
    new{ Name = "PHP", Version = 7 },
};
var output = source.OrderBy(e => e.Version)
                   .ThenBy(e => e.Name.Length);
// -> {{ Name = C#, Version = 7 },
//     { Name = PHP, Version = 7 },
//     { Name = Java, Version = 9 },
//     { Name = C++, Version = 17 }}

ThenByDescending

ソートしたシーケンスに対し、キーが等しい要素同士を降順にソートしたシーケンスを返す

var source = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var output = source.OrderBy(e => e.Version)
                   .ThenByDescending(e => e.Name.Length);
// -> {{ Name = PHP, Version = 7 },
//     { Name = C#, Version = 7 },
//     { Name = Java, Version = 9 },
//     { Name = C++, Version = 17 }}

Reverse

逆順にソートしたシーケンスを返す

var source = new[] {
    new{Name = "C#", Version = 7},
    new{Name = "C++", Version = 17},
    new{Name = "Java", Version = 9},
    new{Name = "PHP", Version = 7},
};
var output = source.Reverse();
// -> {{ Name = PHP, Version = 7 },
//     { Name = Java, Version = 9 },
//     { Name = C++, Version = 17 },
//     { Name = C#, Version = 7 }}

  

射影

Select

1つの要素を単一の要素に射影する

var source = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var output = source.Select(e => e.Name);
// -> {{ C#, C++, Java, PHP }

SelectMany

1つの要素から複数の要素に射影し、その結果を1つのシーケンスとして返す

var source = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var output = source.SelectMany(e => e.Name);
// -> {{ C, #, C, +, +, J, a, v, a, P, H, P }

GroupBy

指定のキーで要素をグループ化し、そのキーとグループのシーケンスを返す

var source = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var output = source.GroupBy(e => e.Version);
// -> { Key=7, Source={{ Name = C#, Version = 7 }, { Name = PHP, Version = 7 }},
//      Key=17, Source={{ Name = C++, Version = 17}},
//      Key=9, Source={{ Name = Java, Version = 9}}}

  

結合

Join

内部結合を行ったシーケンスを返す

var outer = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var inner = new[] {
    new { Name = "C#", DesignedBy = "Microsoft" },
    new { Name = "Java", DesignedBy = "Sun Microsystems" },
    new { Name = "Java", DesignedBy = "Oracle" },
};
var output = outer.Join(inner,
                        o => o.Name,
                        i => i.Name, 
                        (o, i) => new { o.Name, o.Version, i.DesignedBy});
// -> {{ Name = C#, Version = 7, DesignedBy = Microsoft },
//     { Name = Java, Version = 9, DesignedBy = Sun Microsystems },
//     { Name = Java, Version = 9, DesignedBy = Oracle }}

GroupJoin

左部結合を行って指定のキーでグループ化し、そのキーとグループのシーケンスを返す

var outer = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var inner = new[] {
    new { Name = "C#", DesignedBy = "Microsoft" },
    new { Name = "Java", DesignedBy = "Sun Microsystems" },
    new { Name = "Java", DesignedBy = "Oracle" },
};
var output = outer.GroupJoin(inner,
                        o => o.Name,
                        i => i.Name, 
                        (o, i) => new { o.Name, o.Version, DesignedBy = i.Select(e => e.DesignedBy)});
// -> {{ Name = C#, Version = 7, DesigndBy = {Microsoft} },
//     { Name = C++, Version = 17, DesigndBy = {} },
//     { Name = Java, Version = 9, DesigndBy = {Sun Microsystems, Oracle} },
//     { Name = PHP, Version = 7, DesigndBy = {} }}

Concat

2つのシーケンスを連結する

var outer = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var outer2 = new[] {
     new { Name = "Swift", Version = 4 },
     new { Name = "Visual Basic", Version = 6 },
};
var output = outer.Concat(outer2);
// -> {{ Name = C#, Version = 7 },
//     { Name = C++, Version = 17 },
//     { Name = java, Version = 9 },
//     { Name = PHP, Version = 7 },
//     { Name = Swift, Version = 4},
//     { Name = Visual Basic, Version = 6}}

DefaultIfEmpty

シーケンスを返す
シーケンスが空の場合、既定値もしくは任意の要素を返す

var outer = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var output = outer.DefaultIfEmpty();
// -> {{ Name = C#, Version = 7 },
//     { Name = C++, Version = 17 },
//     { Name = java, Version = 9 },
//     { Name = PHP, Version = 7 }}

Zip

指定した関数で、2つのシーケンスを1つのシーケンスにマージする

var outer = new[] {
    new { Name = "C#", Version = 7 },
    new { Name = "C++", Version = 17 },
    new { Name = "Java", Version = 9 },
    new { Name = "PHP", Version = 7 },
};
var outer2 = new[] {
     new { Name = "Swift", Version = 4 },
     new { Name = "Visual Basic", Version = 6 },
};
var output = outer.Zip(outer2, (o1, o2) => o1.Name + "&" + o2.Name);
// -> { C#&Swift, C++&VisualBasic }
Karibash
モダンな技術とPerfumeが好きなエンジニアです。 C#, PHP, Symfony, Laravel, Javascript, TypeScript, Vue.js, React, Swift, Kotlin, Python
illmatics
受託(PHP,Ruby,iOS,Android,js)、SES事業の2本柱で開発、運営するベンチャー企業、猫が大好き
https://www.illmatics.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした