在连接2个表并跳过记录时获取不适当的记录

时间:2016-08-30 16:18:43

标签: c# entity-framework linq

这是我桌子的2个属性:

public class Test
{
    public int Id { get; set; }
    public string Version { get; set; }
    public virtual ICollection<TestOperation> TestOperation { get; set; }
}


public class TestOperation
{
    public int Id { get; set; }
    public Nullable<int> TestId { get; set; }
    public virtual Test Test { get; set; }
}

我正在尝试仅从Test表中获取跳过最后2个测试的那些测试的列表,这些测试在TestOperation表中有条目但是每个测试我将有超过1个记录。

测试表:

TestId   Version
339        1
340        2
341        3
342        4
343        5
344        6
345        7
346        8
347        9
348        10
349        11
350        12
351        13
352        14

以下查询的测试操作表输出:

select TestId, count(*) from [dbo].[TestOperation] group by TestId

TestId    Count(*)
340        10
341        21
342        41
343        8
344        30
345        21
346        18
347        5
348        20
349        31
350        34
351        20
352        16

预期输出从上面的输出中跳过最后2条记录:

TestId  Version
340       2
341       3
342       4
343       5
344       6
345       7
346       8
347       9
348       10
349       11
350       12

请注意,在Test Operation表中,我没有测试ID 339的任何记录。

查询:

var output = (from m in context.Test
              join c in context.TestOperation on m.Id equals c.TestId
              orderby m.Id descending
              select new
              {
                  testId = m.Id,
                  version = m.Version
              }).Skip(2).Distinct().ToList();

上面的查询给了我Test 351,这是错误的,因为我不想要我的Test表中的最后2条记录,而在我的查询中,我正在从列表中跳过2条记录。那么为什么我会看到测试ID 351?

0 个答案:

没有答案