Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ到SQL实现下一个/上一个_C#_Winforms_Linq_Data Access Layer - Fatal编程技术网

C# 使用LINQ到SQL实现下一个/上一个

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

我有下面的代码,试图允许用户通过单击WinForm上的下一步或上一步来“逐步浏览”DB中的案例注释。它将只抓取第一个案例注释。 我做错了什么

我很抱歉,这篇文章已经被多次编辑,但在遵循乔恩·斯基特的建议后,我能够“修复”最初的错误,但它仍然不起作用

我是否需要重新构造查询以考虑当前注释?如果是,我该怎么做

    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,但我遇到了同样类型的问题,我不想用我多次失败的尝试来轰炸我的帖子。我相信这就是乔所说的