1

プロジェクト テーブル:

ID、DeptId、年、名前、レベル

Id = 1, DeptId = 1, Year = 2000, Name = "ABC", Level = 1
Id = 2, DeptId = 1, Year = 2001, Name = "ABC1", Level = 1
Id = 3, DeptId = 1, Year = 2002, Name = "ABC2", Level = 1

Id = 4, DeptId = 2, Year = 2000, Name = "ABC3", Level = 1
Id = 5, DeptId = 2, Year = 2002, Name = "ABC4", Level = 1

Id = 6, DeptId = 3, Year = 2000, Name = "ABC5", Level = 1
Id = 7, DeptId = 3, Year = 2001, Name = "ABC6", Level = 1
Id = 8, DeptId = 3, Year = 2002, Name = "ABC7", Level = 1

プロジェクトテーブルがあります。2001 年の各部門のプロジェクトを取得する必要があります。DeptId = 2 の場合、2001 年のプロジェクトはありません。2000 年の前年のプロジェクトを表示する必要があります。

私のlinqは次の結果を返すはずです。

Id = 2, DeptId = 1, Year = 2001, Name = "ABC1", Level = 1
Id = 4, DeptId = 2, Year = 2000, Name = "ABC3", Level = 1
Id = 7, DeptId = 3, Year = 2001, Name = "ABC6", Level = 1

groupby を使用して DeptId をグループ化することを考えていましたが、このクエリの書き方がわかりません。

アップデート:

これは私が試したものです。

var プロジェクト = project.Where(x=>x.Year == 2001)

しかし、これはDeptId = 2の結果を返しません。そのため、groupbyを使用することを考えていますが、書き方がわかりません。

4

2 に答える 2

3
var query= from p in context.Projects
           group p by p.DeptId into grp
           select grp.Where(x => x.Year <= 2001)
                     .OrderByDescending(x => x.Year)
                     .FirstOrDefault();
于 2012-10-15T00:26:16.563 に答える
0
from l in context.Projects.Where(w => w.Year <= 2001 )
        group l by l.DeptId into depts
        select depts.LastOrDefault();

ラムダのバージョン:

    context.Projects.Where(w => w.Year <= 2001)
        .GroupBy(g => g.DeptId)
        .Select (s => s.LastOrDefault());

または、次のようにします。

    context.Projects.Where(w => w.Year <= 2001)
        .GroupBy(g => g.DeptId)
        .Select (s => s.OrderBy(o => o.Year).LastOrDefault());
于 2012-10-15T00:29:40.457 に答える