C# 使用LINQ到SQL实现下一个/上一个
我有下面的代码,试图允许用户通过单击WinForm上的下一步或上一步来“逐步浏览”DB中的案例注释。它将只抓取第一个案例注释。 我做错了什么 我很抱歉,这篇文章已经被多次编辑,但在遵循乔恩·斯基特的建议后,我能够“修复”最初的错误,但它仍然不起作用 我是否需要重新构造查询以考虑当前注释?如果是,我该怎么做C# 使用LINQ到SQL实现下一个/上一个,c#,winforms,linq,data-access-layer,C#,Winforms,Linq,Data Access Layer,我有下面的代码,试图允许用户通过单击WinForm上的下一步或上一步来“逐步浏览”DB中的案例注释。它将只抓取第一个案例注释。 我做错了什么 我很抱歉,这篇文章已经被多次编辑,但在遵循乔恩·斯基特的建议后,我能够“修复”最初的错误,但它仍然不起作用 我是否需要重新构造查询以考虑当前注释?如果是,我该怎么做 public static Guid NextCaseNoteID (int personID) { var context = new MatrixDataC
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;
}
这就是我的结局,感谢所有发布并遵循我不良想法的人 它似乎工作得很好,虽然我现在正试图证明我是否仍然需要跳过(1)。。。。 谢谢 供日后参考
公共静态Guid NextCaseNoteID(int personID,DateTime?insertDate)
{
var context=新的MatrixDataContext();
Guid nextNoteID=(来自context.tblCaseNotes中的caseNote
其中caseNote.PersonID==PersonID&&caseNote.InsertDate>InsertDate
orderby caseNote.InsertDate
选择caseNote.CaseNoteID).Skip(1).FirstOrDefault();
返回下一个酒店;
}
公共静态Guid PreviousCaseNoteID(int personID,DateTime?insertDate)
{
var context=新的MatrixDataContext();
Guid nextNoteID=(来自context.tblCaseNotes中的caseNote
其中caseNote.PersonID==PersonID&&caseNote.InsertDate
最明显的问题是,您正在创建一个匿名类型的实例。试试这个:
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;
}
public static IQueryable NextCaseNoteID(int personID)
{
var context=新的MatrixDataContext();
IQueryable nextNoteID=(来自context.tblCaseNotes中的caseNote
其中caseNote.PersonID==PersonID
orderby caseNote.InsertDate
选择caseNote.CaseNoteID)。跳过(1)。执行(1);
返回下一个酒店;
}
我一点也不确定它是否真的是你想要的,但它至少有可能编译
是否确实不希望返回实际GUID而不是IQueryable
您可能需要调用FirstOrDefault()
而不是Take(1)
编辑:好的,它确实返回了一个GUID。。。你说它不起作用,但不是说它怎么起作用。如果您想获取下一个案例注释,您很可能应该传入案例注释ID而不是人员ID,但这并不十分清楚……好吧,最明显的问题是您正在创建一个匿名类型的实例。试试这个:
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;
}
public static IQueryable NextCaseNoteID(int personID)
{
var context=新的MatrixDataContext();
IQueryable nextNoteID=(来自context.tblCaseNotes中的caseNote
其中caseNote.PersonID==PersonID
orderby caseNote.InsertDate
选择caseNote.CaseNoteID)。跳过(1)。执行(1);
返回下一个酒店;
}
我一点也不确定它是否真的是你想要的,但它至少有可能编译
是否确实不希望返回实际GUID而不是IQueryable
您可能需要调用FirstOrDefault()
而不是Take(1)
编辑:好的,它确实返回了一个GUID。。。你说它不起作用,但不是说它怎么起作用。如果您想获取下一个案例注释,您很可能应该传入案例注释ID而不是人员ID,但这并不十分清楚…我可能听起来像个白痴。但是,为什么不能使用datareader来做这件事(特别是当您使用LINQtoSQL时,它反过来调用SQLServer来做这件事)
如果我完全误解了这个问题,请告诉我。我听起来可能像个白痴。但是,为什么不能使用datareader来做这件事(特别是当您使用LINQtoSQL时,它反过来调用SQLServer来做这件事)
如果我完全误解了这个问题,请告诉我。如果你想要下一个/上一个方法,你不应该告诉我现在的情况吗? 然后跳过currentPosition+1以获得下一个和currentPosition-1
我通常使用Single()而不是FirstOrDefault()。但是我认为这不会有什么区别。如果你想要下一个/上一个方法,你不应该告诉我现在的情况吗? 然后跳过currentPosition+1以获得下一个和currentPosition-1
我通常使用Single()而不是FirstOrDefault()。但我认为这不会有什么区别。不,我想要实际的Guid,但我遇到了同样的问题,我不想用我多次失败的尝试来轰炸我的帖子。无论如何,我相信这就是乔尔·斯普洛斯基的建议。就我的尝试和迭代而言,FirstOrDefault()会做什么。。。。谢天谢地,我刚意识到使用Guid是我一开始尝试的,但它不会编译,并且
intelisense
(ReSharper???)建议我将noteID的类型更改为IQueryable…FirstOrDefault
将执行查询并返回第一个结果或类型的默认值(即本例中的default(Guid)
)是的,我现在明白了。我怎样才能让它转到下一个,然后再转到下一个?不,它不是字符串。我真的很抱歉弄糊涂了。查看我当前的编辑,我现在将不进行编辑,您将看到我的位置。很抱歉不,我想要实际的Guid,但我遇到了同样类型的问题,我不想用我多次失败的尝试来轰炸我的帖子。我相信这就是乔所说的