Linq:选择每个组的最新记录

时间:2015-11-13 03:50:37

标签: linq entity-framework-6

我想使用Linq从SQL Server表中获取每个组的最新记录。

表示例:

Original data

我想得到这个结果:

Desired result

我的Linq查询为每个公司返回一条记录,但它不会返回最新的记录:

<listbox width="800px">
    <listhead>
        <listheader width="500px">header 1</listheader>
        <listheader width="500px">header 2</listheader>
        <listheader>header 3</listheader>
    </listhead>

    <listitem>
        <listcell>item 1</listcell>
        <listcell>item 1</listcell>
        <listcell>item 1</listcell>
    </listitem>

    <listitem>
        <listcell>item 1</listcell>
        <listcell>item 1</listcell>
        <listcell>item 1</listcell>
    </listitem>

    <listitem>
        <listcell>item 1</listcell>
        <listcell>item 1</listcell>
        <listcell>item 1</listcell>
    </listitem>
</listbox>

我在这里缺少什么?为什么没有正确订购NextPaymentDate?

!! UPDATE !! 我的查询按预期工作。在分析了@Gilang和@JonSkeet评论后,我进行了进一步的测试,发现由于没有更新的列,我没有得到预期的结果。

1 个答案:

答案 0 :(得分:1)

 var query = from p in db.Payments
             where p.Status == false
             group p by p.CompanyID into op
             select new { 
                 CompanyID = op.Key,
                 NextPaymentDate = op.Max(x => x.NextPaymentDate), 
                 Status = false
             };

您的查询未正确排序的原因是您的查询没有进行适当的分组。您通过CompanyID正确分组,但是您必须通过调用聚合函数来检索最大的NextPaymentDate。

状态可以指定为false,因为它已经被早期子句中的Where子句过滤了。