1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

基本的なLINQ

Last updated at Posted at 2024-10-14

はじめに

LINQに限った事ではないのですが、使わないと直ぐに忘れるので、基本的なLINQを纏めておこうと思います。

LINQの書き方は「クエリ構文」と「メソッド構文」の2種類がありますが、とりあえずは(私の中では)使うことが多い「メソッド構文」に限定します。

クエリ構文については別で書きました。

メソッド構文
var vegetableRethod = m_vegetable.Where(x => x.kind == 2)
                                 .OrderBy(x => x.id)
                                 .Select(x => x.name);
クエリ構文
var vegetableQuery = from x in m_vegetable
                    where x.kind == 2
                  orderby x.id
                   select x.name;

基本的なLINQ

LINQ
// 下記のデータを設定
IEnumerable<m_kind> m_kind = getKind();
IEnumerable<m_vegetable> m_vegetable = getVegetable();

// x.kind == 3が存在するか
bool vegetableAny = m_vegetable.Any(x => x.kind == 3);

// x.kind == 2が何個あるか
int vegetableCount = m_vegetable.Count(x => x.kind == 2);

// x.idの昇順に並び替え
var vegetableOrderBy = m_vegetable.OrderBy(x => x.id);

// x.idの降順に並び替え
var vegetableOrderByDescending = m_vegetable.OrderByDescending(x => x.id);

// x.kind == 1のデータを絞り込み
var vegetableWhere = m_vegetable.Where(x => x.kind == 1);

// isRoot(x.kind == 1の場合:true、それ以外の場合:false)を追加
var vegetableSelect = m_vegetable.Select
                                  (x => new { x.id
                                            , x.name
                                            , x.kind
                                            , isRoot = x.kind == 1 });

// i(連番)を追加、x.kindを除外
var vegetableSelectAddIndex = m_vegetable.Select((x, i) => new { i, x.id, x.name });

// 内部結合
var vegetableJoin= m_vegetable.Join
                               (m_kind
                               , x => x.kind
                               , y => y.id
                               , (x, y) => new { x.id
                                               , x.name
                                               , kind_id = x.kind
                                               , kind_name = y.name });

// 内部結合(上と結合する順序が違うだけで、結果は同じ)
var vegetableInnerJoin = m_kind.Join
                                (m_vegetable
                                , x => x.id
                                , y => y.kind
                                , (x, y) => new { y.id
                                                , y.name
                                                , kind_id = y.kind
                                                , kind_name = x.name });

// 外部結合
var vegetableOuterJoin = m_kind.GroupJoin
                                (m_vegetable
                                , x => x.id
                                , y => y.kind
                                , (x, y) => new { x, y })
                               .SelectMany
                                (z => z.y.DefaultIfEmpty
                                          (new m_vegetable { id = 0
                                                           , name = ""
                                                           , kind = 0 })
                                , (z, w) => new { w.id
                                                , w.name
                                                , kind_id = z.x.id
                                                , kind_name = z.x.name });

サンプルデータ

m_kind
id name
1 根菜類
2 葉茎菜類
3 果菜類
4 香辛野菜
5 果実的野菜

m_vegetable
id name kind
101 大根 1
102 人参 1
103 ジャガイモ 1
104 ごぼう 1
201 白菜 2
202 キャベツ 2
203 ほうれん草 2
301 キュウリ 3
302 トマト 3
303 ピーマン 3
304 カボチャ 3
305 枝豆 3
501 メロン 5
502 スイカ 5
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?