0

テーブルのタイムスタンプと pable プロジェクトがあります。

最後に生成されたタイムスタンプを含む列「Finished == false」のすべてのプロジェクトが必要です。

私の現在のコード:

 var result = from p in _contextProvider.Context.Projects
                     join t in _contextProvider.Context.Timestamps on p.Guid equals t.GuidProject
                     where p.Finished == false
                     orderby t.End
                     select new { p.Name, t.End };

「プロジェクトごとに max(t.Enc) グループ」を作成する方法は? PS: タイトルが悪くて申し訳ありませんが、どの構文を使用しているかわかりません :(

4

2 に答える 2

0

わかりました、これはトリッキーな質問です。これを SQL で行う方法は次のとおりで、比較的簡単です。

SELECT *
FROM Projects p
JOIN Timestamps t ON p.Guid = t.GuidProject
WHERE p.Finshed = FALSE AND
 t.END = (
    SELECT max(t1.END)
    FROM Projects p1
    JOIN Timestamps t1 ON p1.Guid = t1.GuidProject
    WHERE p.Finshed = FALSE AND p.Guid = p1.Guid
 )

それをLinqに変換するのはもっと難しいでしょう。これは私が試したものですが、テストできませんでした。

        var baseQuery = _contextProvider.Context.Projects
                .Join(_contextProvider.Context.Timestamps, p => p.Guid, t => t.GuidProject, (p, t) => new {p, t})
                .Where(o => o.p.Finished == false);

        var result = baseQuery.Select
            .Where(o => o.t.End == baseQuery
                            .Where(o2 => o2.p == o.p)
                            .Select(o2 => o2.t.End)
                            .Max()
                   ).Select( o => new {o.p.Name, o.t.End} );

私はそれを少し複雑にしすぎたのかもしれませんgroup by.

        var result = (from p in _contextProvider.Context.Projects
                      join t in _contextProvider.Context.Timestamps on p.Guid equals t.GuidProject
                      where p.Finished == false
                      group t.End by p.Name into g
                      select new { name=g.Key, end=g.Max()} );
于 2013-02-20T08:54:01.693 に答える
0

手早く汚れた解決策として、t.End で降順に並べ替えてから、上位 1/first-or-default の結果のみを取得することができます。

于 2013-02-20T08:55:34.893 に答える