繁体   English   中英

在C#中需要LINQ ArgumentOutOfRangeException的帮助

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM