代码之家  ›  专栏  ›  技术社区  ›  Christopher Klein

需要有关C中Linq ArgumentOutOfRangeException的帮助#

  •  2
  • Christopher Klein  · 技术社区  · 15 年前

    希望这是一个周五的问题,但我有以下代码:

    //System.ArgumentOutOfRangeException generated if there is no matching data
    currentAnswers = new CurrentAnswersCollection()
        .Where("PARTICIPANT_ID", 10000).Load()[0];
    

    CurrentAnswersCollection是一个强类型集合,由返回到我的数据库的视图填充。 当然,问题是如果没有对应的参与者,我会得到错误消息。

    有没有更好的方法来写这个,这样我就不会收到错误消息? 我只是不太了解linq语法,不知道是否可以先测试existance?

    谢谢。

    4 回复  |  直到 13 年前
        1
  •  7
  •   David M    15 年前

    使用此:

    currentAnswers = new CurrentAnswersCollection()
        .Where("PARTICIPANT_ID", 10000).Load()
        .FirstOrDefault();
    

    如果没有第一个元素,它将返回空值。

    但您可能需要先修复代码(在此处复制)-. .Where 语法看起来不可靠。

        2
  •  1
  •   mt0321    15 年前

    尝试使用索引器从(空)列表中获取第一个项时,将发生ArgumentOutOfRangeException。使用firstOrDefault()扩展方法是返回集合的第一个元素(如果有)的方便方法,否则返回空值。

    currentAnswers = new CurrentAnswersCollection().Where("PARTICIPANT_ID", 10000)
                                                   .Load()
                                                   .FirstOrDefault();
    

    http://msdn.microsoft.com/en-us/library/system.linq.enumerable.firstordefault.aspx

        3
  •  0
  •   AllenG    15 年前

    尝试:

    var answers = new CurrenAnswersCollection().Where("PARTICIPANT_ID", 10000);
    if(answers.Count() >= 1) currentAnswers = answers.Load()[0];
    

    或者类似的东西。

        4
  •  0
  •   Kevin DiTraglia    13 年前

    在.where中需要lambda表达式。

    currentAnswers = new CurrentAnswersCollection()
        .Where(c => c.PARTICIPANT_ID == 10000).Load().FirstOrDefault();