1

我希望用 linq 返回处于某个阶段的所有 PersonID。我的示例数据集是 -

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 回答