LoginSignup
9
11

More than 5 years have passed since last update.

LINQ

Last updated at Posted at 2018-05-28

データの操作をするときはLINQを使うとスマートに実装できる。

github
https://github.com/ma-ak2011/LINQ

用意したデータ

LINQ.cs
//芸能人好感度ランキングから名前を借りました。出身地や年齢は加工しています。
var people = new List<Person>
{
    new Person { Name = "明石家さんま", Age = 63, Gender = Gender.Male, BirthPlace = "東京都"},
    new Person { Name = "阿部寛", Age = 54, Gender = Gender.Male, BirthPlace = "神奈川県"},
    new Person { Name = "マツコ・デラックス", Age = 46, Gender = Gender.Male, BirthPlace = "千葉県"},
    new Person { Name = "内村光良", Age = 54, Gender = Gender.Male, BirthPlace = "熊本県"},
    new Person { Name = "新垣結衣", Age = 30, Gender = Gender.Female, BirthPlace = "神奈川県"},
    new Person { Name = "浅田真央", Age = 28, Gender = Gender.Female, BirthPlace = "東京都"},
    new Person { Name = "綾瀬はるか", Age = 33, Gender = Gender.Female, BirthPlace = "熊本県"}
};

最初の一行を取得する

LINQ.cs
var first = people.First();

//明石家さんま 63才 男 東京都出身

男性を取得する

LINQ.cs
var men = people.Where(p => p.Gender == Gender.Male).ToList();

//明石家さんま 63才 男 東京都出身
//阿部寛 54才 男 神奈川県出身
//マツコ・デラックス 46才 男 千葉県出身
//内村光良 54才 男 熊本県出身

女性から一人取得する

LINQ.cs
var firstFemale = people.First(p => p.Gender == Gender.Female);

//新垣結衣 30才 女 神奈川県出身

熊本県出身の人がいるかどうか

LINQ.cs
var existPersonFromKumamoto = people.Any(p => p.BirthPlace == "熊本県");

//True

全員男性かどうか

LINQ.cs
var areAllMale = people.All(p => p.Gender == Gender.Male);

//False

年齢で昇順に並べる

LINQ.cs
var orderedByAge = people.OrderBy(p => p.Age).ToList();

//浅田真央 28才 女 東京都出身
//新垣結衣 30才 女 神奈川県出身
//綾瀬はるか 33才 女 熊本県出身
//マツコ・デラックス 46才 男 千葉県出身
//阿部寛 54才 男 神奈川県出身
//内村光良 54才 男 熊本県出身
//明石家さんま 63才 男 東京都出身

年齢で降順に並べた後、名前で昇順に

LINQ.cs
var orderedByAgeThenByName = people.OrderByDescending(p => p.Age).ThenBy(p => p.Name).ToList();

//明石家さんま 63才 男 東京都出身
//阿部寛 54才 男 神奈川県出身
//内村光良 54才 男 熊本県出身
//マツコ・デラックス 46才 男 千葉県出身
//綾瀬はるか 33才 女 熊本県出身
//新垣結衣 30才 女 神奈川県出身
//浅田真央 28才 女 東京都出身

出身地ごとにグループにして、グループを出身地の県名の順に並べる

LINQ.cs
var groupByAndOrderedBy = people.GroupBy(p => p.BirthPlace).OrderBy(g => g.Key).ToList();

//熊本県
//内村光良 54才 男 熊本県出身
//綾瀬はるか 33才 女 熊本県出身

//神奈川県
//阿部寛 54才 男 神奈川県出身
//新垣結衣 30才 女 神奈川県出身

//千葉県
//マツコ・デラックス 46才 男 千葉県出身

//東京都
//明石家さんま 63才 男 東京都出身
//浅田真央 28才 女 東京都出身

年齢だけ一覧にしたい

LINQ.cs
var ages = people.Select(p => p.Age).ToList();

//63
//54
//46
//54
//30
//28
//33

出身地だけ一覧にして重複を消したい

LINQ.cs
var birthPlaces = people.Select(p => p.BirthPlace).Distinct().ToList();

//東京都
//神奈川県
//千葉県
//熊本県

年齢の最小値、最大値、平均値、合計値を取得したい

LINQ.cs
var min = people.Min(p => p.Age);
//最小値:28

var max = people.Max(p => p.Age);
//最大値:63

var average = people.Average(p => p.Age);
//平均値:44

var sum = people.Sum(p => p.Age);
//合計値:308

LINQみたいなことをJavaScriptでしたい人はこちら lodash

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11