C#调用FirstOrDefault()是否返回null?如何强制无匹配时返回null?
问题解答
你不需要做任何额外配置就能实现未匹配到记录时返回null的需求,你混淆了两个完全独立的逻辑:
- 数据库表的
not null约束只限制单条记录存入数据库时,对应字段不能为null,和查询不到记录时EF的返回值没有任何关联 - 你代码中
FirstOrDefault()的TSource是ResultTable对应的实体类,属于引用类型,引用类型的默认值本身就是null,只要没有匹配到记录,返回结果自然就是null
另外你当前代码存在两个可修复的问题:
- 字段名拼写错误:你代码里写的
result.FinaName和实际表字段FileName不一致,会直接导致查询报错 - 字符串比较写法冗余:不需要用
CompareTo方法判断等于,直接写where result.FileName == fileName即可,EF会自动将该判断转换为SQL层面的等值匹配,运行效率和可读性都更好
修改后的代码参考:
var resultSearch = DB.ContextManagement.ResultTable .FirstOrDefault(result => result.FileName == fileName); if (resultSearch == null) { // 未匹配到记录的逻辑 } else { // 匹配到记录的逻辑 }
内容的提问来源于stack exchange,提问作者rlnnclt
相关产品推荐
相关产品推荐

