[英]Need help with a LINQ ArgumentOutOfRangeException in C#
希望这是周五问题的一个很好的垒球,但我有以下代码行:
//System.ArgumentOutOfRangeException generated if there is no matching data
currentAnswers = new CurrentAnswersCollection()
.Where("PARTICIPANT_ID", 10000).Load()[0];
CurrentAnswersCollection是一个强类型集合,由一个返回到我的数据库的视图填充。 问题当然是,如果没有相应的PARTICIPANT_ID = 10000,我会收到错误消息。
有没有更好的方法来写这个,以便我根本不会得到错误信息? 我只是不太了解LINQ语法,知道我是否可以先测试存在?
谢谢。
用这个:
currentAnswers = new CurrentAnswersCollection()
.Where("PARTICIPANT_ID", 10000).Load()
.FirstOrDefault();
如果没有第一个元素,它将返回null。
但是你可能需要先修复你的代码(这里复制) - .Where
语法看起来很狡猾。
当您尝试使用索引器从(空)列表中获取第一个项目时,会发生ArgumentOutOfRangeException。 使用FirstOrDefault()扩展方法是返回集合的第一个元素(如果有)的便捷方式,否则返回null。
currentAnswers = new CurrentAnswersCollection().Where("PARTICIPANT_ID", 10000)
.Load()
.FirstOrDefault();
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.firstordefault.aspx
你需要在.Where中使用lambda表达式。
currentAnswers = new CurrentAnswersCollection()
.Where(c => c.PARTICIPANT_ID == 10000).Load().FirstOrDefault();
尝试:
var answers = new CurrenAnswersCollection().Where("PARTICIPANT_ID", 10000);
if(answers.Count() >= 1) currentAnswers = answers.Load()[0];
或类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.