序列不包含“可能有多个元素的查询”的元素
本文关键字:元素 查询 可能有 包含 | 更新日期: 2023-09-27 18:27:29
我是Linq和C#的新手,我花了很长时间试图解决这个非常简单的问题。
我有以下代码:
var currcard = from c in db.CreditCards where c.Id == cid select c;
其中db是数据库上下文,而信用卡是该数据库中的一个表。
这可能导致返回几个记录,然后我使用foreach对这些记录进行迭代。当有记录需要返回时,一切都很顺利。
然而,有时不会返回任何记录,并且我会得到"Sequence contains no elements"错误。我不想使用FirstOrDefault或SingleOrDefault,因为如果返回了所有记录,我就想要它们。然而,如果没有返回任何记录,当我需要null时,我一辈子都无法计算出这些函数的等价物。
如果解决方案不简单,我不会感到惊讶。有时候c看起来过于复杂。
编辑:最后,我发现错误是由上下文上的SaveChanges方法引发的,而不是赋值语句或迭代块。使用Any关键字最终让我发现了自己的问题,所以即使这是一个单独的问题,我也将答案标记为正确。但感谢大家的帮助。
您可以在没有问题的情况下对其进行迭代:
foreach (var r in currcard) // won't throw
同样,您可以事先检查列表中是否有任何项目:
if (currcard.Any()) // won't throw
如果序列是空的,并且您对其进行迭代,则不会发生任何事情,这是您通常想要的语义(也是您想要的)。您使用的迭代代码究竟是什么?foreach对于空序列应该没有任何问题。
var currcard = from c in CreditCards where c.Id == cid select c;
if (currcard.Any()) // do not be tempted to use currcard.Count() > 0
{
// something with currcard; e.g.
System.Console.WriteLine("Currcard");
foreach(var card in currcard) // should do nothing if currcard has no elements
{
}
}