1

特定の段階にあるすべての PersonID を linq で返すことを検討しています。私のサンプルデータセットは -

ID  DateCreated Stage PersonID
1   1/1/2012    A    101   
2   1/1/2012    A    102
3   1/1/2012    A    103
4   1/1/2012    A    104
5   2/1/2012    B    101
6   3/1/2012    B    102
7   3/1/2012    B    103
8   3/1/2012    C    101
9   4/1/2012    C    102
10  5/1/2012    C    103
11  5/1/2012    D    101

したがって、ステージ ci のすべてを返したい場合は、PersonID の 102,103 のみを取得

します。何かアイデアはありますか?

4

2 に答える 2

2
IEnumerable<int> personIds = DbContext.Table
    .GroupBy(record => record.PersonID)
    .Where(group => group.Last().Stage == "c")
    .Select(group => group.Key)

このように、101のような人がステージcを過ぎて進んだ場合、最後のステージはDであるため、返されません。104も、まだステージCに達していないため、返されません。視覚化すると、次のようになります。 。最終段階は括弧内にあります。

Group: 101 - A, B, C, [D]
Group: 102 - A, B, [C]
Group: 103 - A, B, [C]
Group: 104 - [A]
于 2012-12-16T01:17:31.367 に答える
1

だから私はついにそれをここで動作させることが解決策です-

 var query = DbContext.Table
                .GroupBy(p => p.PersonID)
                .Select(grp =>  grp.OrderByDescending(
                     d => d.DateCreated).FirstOrDefault()
                ).Where(a => a.Stage =="C");

@Despertarにご協力いただきありがとうございます。

于 2012-12-16T13:56:11.233 に答える