我有以下代码,试图允许用户通过单击WinForm上的Next或Previous来“逐步完成”DB中的Case Notes。它只会获得First Case Note。 我做错了什么?
这篇文章有很多编辑,我道歉,但在遵循Jon Skeet的建议后,我能够“修复”原本错误但仍然无效。
我是否需要重新构建查询以考虑当前注释?如果是这样,我该怎么做?
public static Guid NextCaseNoteID (int personID)
{
var context = new MatrixDataContext();
Guid nextNoteID = (from caseNote in context.tblCaseNotes
where caseNote.PersonID == personID
orderby caseNote.InsertDate
select caseNote.CaseNoteID ).Skip(1).FirstOrDefault();
return nextNoteID;
}
这就是我最终的结果,感谢所有发布并遵循我思想不良思路的人......
虽然我现在正试图证明我是否还需要Skip(1),但它似乎运作良好.... 谢谢!
以供将来参考
public static Guid NextCaseNoteID (int personID, DateTime? insertDate)
{
var context = new MatrixDataContext();
Guid nextNoteID = (from caseNote in context.tblCaseNotes
where caseNote.PersonID == personID && caseNote.InsertDate > insertDate
orderby caseNote.InsertDate
select caseNote.CaseNoteID ).Skip(1).FirstOrDefault();
return nextNoteID;
}
public static Guid PreviousCaseNoteID(int personID, DateTime? insertDate)
{
var context = new MatrixDataContext();
Guid nextNoteID = (from caseNote in context.tblCaseNotes
where caseNote.PersonID == personID && caseNote.InsertDate < insertDate
orderby caseNote.InsertDate
select caseNote.CaseNoteID).Skip(1).FirstOrDefault();
return nextNoteID;
}
答案 0 :(得分:2)
嗯,最明显的问题是你正在创建一个匿名类型的实例。试试这个:
public static IQueryable<Guid> NextCaseNoteID (int personID)
{
var context = new MatrixDataContext();
IQueryable<Guid> nextNoteID = (from caseNote in context.tblCaseNotes
where caseNote.PersonID == personID
orderby caseNote.InsertDate
select caseNote.CaseNoteID).Skip(1).Take(1);
return nextNoteID;
}
我完全不确定这是你真正想要的,但它至少可以编译......
您确定不想返回实际GUID 而不是IQueryable<Guid>
吗?
您可能需要拨打FirstOrDefault()
而不是Take(1)
...
编辑:好的,所以它 会返回一个GUID ...你说它不起作用,但 它不起作用。如果你想获取下一个案例注释,你应该很可能传递案例注释ID而不是人员ID,但它并不是非常清楚......
答案 1 :(得分:1)
如果想要下一个/上一个方法,你现在不应该告知现在的位置是什么吗? 然后为next和currentPosition - 1跳过currentPosition + 1。
我通常使用Single()而不是FirstOrDefault()。但我认为这没什么区别。
答案 2 :(得分:0)
如果我完全误解了这个问题,请告诉我。