对于邀请函数,我有一个屏幕,上面有一个字段,允许用户输入他们在其他地方获得的代码。然后检入控制器,查看与此代码关联的记录。但我的问题是,如果代码不是第一个类型是检查(类型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)
。
实际上,First
和FirstOrDefault
有重载,它们接受条件参数,所以你不需要调用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是一个布尔变量或者该行- 使用
db.Records.Where(u => u.Code1).FirstOrDefault();
- 在绑定到查询之前,检查比较值(例如
u.code1
)是否从模型中具有此属性。