LoginSignup
8
11

More than 5 years have passed since last update.

LinqでjoinとかGroup by sumとか。

Last updated at Posted at 2016-12-13

まとまってないけど、とりあえずメモ。

JOIN

INNER JOIN

TableAにTableBとTableCと紐づくIDがあることが前提。

var query = from a in db.TableA
            join b in db.TableB on a.id equals b.id
            join c in db.TableC on a.id equals c.Id
            select new { name1 = a.AName, name2 = b.BName, name3 = c.CName};

OUTER JOIN

DefaultIfEmpty()を入れるとOUTER JOINになる。

var query = from a in db.TableA
            join b in db.TableB on a.id equals b.id into A
            from x in A.DefaultIfEmpty()
            join c in db.TableC on a.id equals c.id into B
            from y in B.DefaultIfEmpty()
            select new { name1 = a.AName, name2 = x.BName, name3 = y.CName };

Group By + Sum

Group byしてSum。

var query = from x in db.TableA
            group x by x.GroupName into A
            select new { A.Key, sum = A.Sum(a => (int)a.Price) };

JOINして複数キーでGroup ByしてSum

いろいろな書き方出来ますが、例えば下記のような感じ。FirstOrDefault()の使い方がポイント。

var ret = from a in TableA
          join b in TableB on a.id equals b.id
          group new { a, b } by new { a.item, b.item } into X
          orderby X.FirstOrDefault().a.code
          select new { item1 = X.FirstOrDefault().a.item, sum = X.Sum(x => x.a.status), item2 = X.FirstOrDefault().b.item };
8
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
8
11