这是我桌子的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?