Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# 如果数据集结束,则返回第一条记录_C#_Linq - Fatal编程技术网

C# 如果数据集结束,则返回第一条记录

C# 如果数据集结束,则返回第一条记录,c#,linq,C#,Linq,我一直在开发next()和previous()功能,以便在IEnumerable数据集上从一个记录移动到另一个记录。我想出的方法工作得很好,总是根据需要返回类型——除了第一条和最后一条记录。如果我查看最后一条记录,我希望LINQ返回第一条记录,如果我查看第一条记录,前一条记录将是最后一条记录。使记录之间的移动无穷无尽 我目前有这些方法(我已为隐私重命名了类型):- private static Teddy\u getNext(字符串代码,IEnumerable teddies) { 返回tedd

我一直在开发
next()
previous()
功能,以便在
IEnumerable
数据集上从一个记录移动到另一个记录。我想出的方法工作得很好,总是根据需要返回类型——除了第一条和最后一条记录。如果我查看最后一条记录,我希望LINQ返回第一条记录,如果我查看第一条记录,前一条记录将是最后一条记录。使记录之间的移动无穷无尽

我目前有这些方法(我已为隐私重命名了类型):-

private static Teddy\u getNext(字符串代码,IEnumerable teddies)
{
返回teddies.SkipWhile(i=>!i.Code.Equals(Code.ToUpper()).Skip(1.FirstOrDefault());
}
私有静态Teddy_getPrevious(字符串代码,IEnumerable teddies)
{
返回teddies.TakeWhile(i=>!i.Code.Equals(Code.ToUpper()).LastOrDefault();
}
我仍然希望LINQ返回一个
Teddy
类型,否则我会麻烦地处理空类型。有人能帮忙吗


感谢您的帮助。

我将尝试以下实现:

private static Teddy _getNext(string code, IEnumerable<Teddy> teddies)
{
    return teddies.SkipWhile(i => !i.Code.Equals(code.ToUpper())).Skip(1).FirstOrDefault()
        ?? teddies.FirstOrDefault();
}
private static Teddy\u getNext(字符串代码,IEnumerable teddies)
{
返回teddies.SkipWhile(i=>!i.Code.Equals(Code.ToUpper()).Skip(1.FirstOrDefault())
??泰迪熊。FirstOrDefault();
}
其工作方式是当
Skip(1)
超过输入的末尾时,确保
FirstOrDefault()
返回
null
,从
teddies
中获取第一条记录


getPrevious
的实现将是这方面的“镜像”,使用
LastOrDefault()
而不是
FirstOrDefault()
,我将尝试以下实现:

private static Teddy _getNext(string code, IEnumerable<Teddy> teddies)
{
    return teddies.SkipWhile(i => !i.Code.Equals(code.ToUpper())).Skip(1).FirstOrDefault()
        ?? teddies.FirstOrDefault();
}
private static Teddy\u getNext(字符串代码,IEnumerable teddies)
{
返回teddies.SkipWhile(i=>!i.Code.Equals(Code.ToUpper()).Skip(1.FirstOrDefault())
??泰迪熊。FirstOrDefault();
}
其工作方式是当
Skip(1)
超过输入的末尾时,确保
FirstOrDefault()
返回
null
,从
teddies
中获取第一条记录

使用
LastOrDefault()
而不是
FirstOrDefault()

private static tedy\u getNext(字符串代码,IEnumerable泰迪熊),实现
getPrevious
将是这方面的“镜像” { 返回teddies.SkipWhile(i=>!i.Code.Equals(Code.ToUpper()).Skip(1.FirstOrDefault()) ?泰迪熊。第一个(); } 私有静态Teddy_getPrevious(字符串代码,IEnumerable teddies) { 返回teddies.TakeWhile(i=>!i.Code.Equals(Code.ToUpper()).LastOrDefault() ?泰迪熊。最后一个(); }
你可以用这个。但是,如果您传入一个空的teddies集合,它将抛出一个异常。改用FirstOrDefault()可以避免抛出,但返回null,这是您声明不需要的

??
是null coalesce运算符,如果左侧的计算结果为null,则将返回右侧的值

private static Teddy\u getNext(字符串代码,IEnumerable teddies)
{
返回teddies.SkipWhile(i=>!i.Code.Equals(Code.ToUpper()).Skip(1.FirstOrDefault())
?泰迪熊。第一个();
}
私有静态Teddy_getPrevious(字符串代码,IEnumerable teddies)
{
返回teddies.TakeWhile(i=>!i.Code.Equals(Code.ToUpper()).LastOrDefault()
?泰迪熊。最后一个();
}
你可以用这个。但是,如果您传入一个空的teddies集合,它将抛出一个异常。改用FirstOrDefault()可以避免抛出,但返回null,这是您声明不需要的


??
是null coalesce运算符,如果左侧的计算结果为null,则将返回右侧的值

您可以尝试将该
IEnumerable
转换为
LinkedList
。您觉得怎么样?您可以尝试将
IEnumerable
转换为
LinkedList
。你觉得怎么样?+1表示同样彻底的回答。遗憾的是,我不能将2标记为正确。谢谢:)@dooburt注意这两个答案不一样:即使
teddies
为空,我的也不会崩溃。谢谢@dasblinkenlight,但是
teddies
永远不能为空,因为集合被传递给它。尽管如此,我还是很感激:)+1的回答同样透彻。遗憾的是,我不能将2标记为正确。谢谢:)@dooburt注意这两个答案不一样:即使
teddies
为空,我的也不会崩溃。谢谢@dasblinkenlight,但是
teddies
永远不能为空,因为集合被传递给它。尽管如此,我还是很感激:)
private static Teddy _getNext(string code, IEnumerable<Teddy> teddies)
{
    return teddies.SkipWhile(i => !i.Code.Equals(code.ToUpper())).Skip(1).FirstOrDefault() 
       ?? teddies.First();
}

private static Teddy _getPrevious(string code, IEnumerable<Teddy> teddies)
{
    return teddies.TakeWhile(i => !i.Code.Equals(code.ToUpper())).LastOrDefault() 
       ?? teddies.Last();
}