问题与查询返回null之前,我可以检查null



对于邀请函数,我有一个屏幕,上面有一个字段,允许用户输入他们在其他地方获得的代码。然后检入控制器,查看与此代码关联的记录。但我的问题是,如果代码不是第一个类型是检查(类型1或类型2),控制器爆炸。所以这里我认为它应该是这样的(这不起作用),虽然我意识到我只是c#的新手。

Record rec = db.Records.Where(u = u.Code1).First();
If (rec != null) 
{
   Other code...
   Exit controller
}

Record rec2 = db.Records.Where(u = u.Code2).First();
If (rec2 != null) 
{
   Other code...
   Exit controller
}
Return to view - codes are invalid.

我尝试过其他版本,我把对象检查在if语句中,但也没有工作。什么好主意吗?

使用FirstOrDefault而不是First。如果集合为空,首先抛出异常,如果集合为空,FirstOrDefault返回default(T)

实际上,FirstFirstOrDefault有重载,它们接受条件参数,所以你不需要调用Where

,

var x = numbers.FirstOrDefault(n => n % 2 == 1);

这将返回集合中的第一个奇数,如果没有满足条件则返回0(或者根本没有)

正如MSDN文档中关于IEnumerable的解释。首先,如果序列

中没有元素,该方法会抛出异常。

First(IEnumerable)方法抛出异常源不包含任何元素。时返回默认值如果源序列为空,则使用FirstOrDefault方法

所以你应该写

Record rec = db.Records.FirstOrDefault(u => u.Code1);
if(rec == null)
{
    ....
}

请注意,Where扩展中使用的相同条件可以直接用于FirstOrDefault

顺便说一下,我不清楚你的表情是什么。lambda表达式(语法为=>)应该返回一个布尔值,或者Code1是一个布尔变量或者该行
有问题
  1. 使用db.Records.Where(u => u.Code1).FirstOrDefault();
  2. 在绑定到查询之前,检查比较值(例如u.code1)是否从模型中具有此属性。

相关内容

  • 没有找到相关文章

最新更新