对于邀请函数,我有一个屏幕,其上有一个字段,用户可以输入他们在别处获得的代码。然后我检查控制器以查看与此代码关联的记录。但我的问题是控制器爆炸如果代码不是第一种类型是检查(类型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语句中但是也没有用。有什么想法吗?
答案 0 :(得分:4)
使用FirstOrDefault
而不是First
。如果集合为空,则首先抛出异常,如果集合为空,则FirstOrDefault返回default(T)
。
实际上,First
和FirstOrDefault
的重载带有条件参数,因此您不需要调用Where
例如:
var x = numbers.FirstOrDefault(n => n % 2 == 1);
这将返回集合中的第一个奇数,如果没有满足条件的话,则返回0(或者根本不返回。)
答案 1 :(得分:2)
正如MSDN docs on IEnumerable.First所解释的,如果序列中没有元素,此方法会抛出异常
First(IEnumerable)方法抛出异常if source不包含任何元素。而是在返回时返回默认值 源序列为空,使用FirstOrDefault方法
所以你应该写
Record rec = db.Records.FirstOrDefault(u => u.Code1);
if(rec == null)
{
....
}
请注意,Where扩展中使用的相同条件可以直接与FirstOrDefault
一起使用顺便说一下,目前还不清楚你的表达是什么。 lambda表达式(语法为=>)应该返回一个布尔值,或者你的Code1是一个布尔变量,或者该行中出错了什么
答案 2 :(得分:0)
db.Records.Where(u => u.Code1).FirstOrDefault();
u.code1
)是否在绑定到查询之前从模型中具有此属性。