Linq,如何检查字段值是否为null

3

在使用LINQ查询时,我遇到了错误:

System.NullReferenceException: 对象引用未设置为对象的实例。


(注:这是一种常见的C#编程语言错误,可能是由于代码中的某个对象变量没有被正确地初始化或赋值而导致)
var db = from d in DepartmentBLL.GetDepartmentList()
     join b in BudgetMasterBLL.GetBudgetMasterList()            
     on d.Departmentid equals b.Departmentid into leftJoin                     
     from results in leftJoin.DefaultIfEmpty()
     select new
     {
         Name = d.Name,
         Create = results.Budgetmasterid == null ? "null": "value", //ERROR HERE
         CreateURL = "frmBudgetInitial.aspx?departmentid=" + d.Departmentid.ToString() + "&departmentcategoryid=" + d.Departmentcategoryid.ToString()
     };

我在论坛上找到了一些帮助,但没有解决我的问题,请指教。谢谢。

在使用results.Budgetmasterid之前,首先检查results是否为空。 - DotNetUser
由于results.Budgetmasterid是一个字符串值,你应该检查String.Empty而不是null吗? - Ashwin Chandran
2个回答

4

尝试

Create = results == null || string.IsNullOrEmpty(results.Budgetmasterid) ? "null": "value",

或者

Create = results == null || string.IsNullOrWhitespace(results.Budgetmasterid) ? "null": "value",

这似乎是正确的,但同时,它无法解决第一个异常。 - Ales Ruzicka
同意。点(.)仍然可以自由地引用空对象。 - Vladislav Zorov
@Ales 在你的评论之后我进行了编辑 [at]Vladislav。现在正确了吗? - Bastardo
1
对我来说看起来没问题。但是楼主消失了。 - Ales Ruzicka

2

这应该会有所帮助

Create = results == null || results.Budgetmasterid == null ? "null": "value", //ERROR HERE

如果没有返回结果,这不会将“true”分配给“Create”吗? - Vladislav Zorov
当没有返回结果时,原始条件为真。我只跟着那个条件。 - Ales Ruzicka
顺便问一下,results 可以是 null 吗?我的意思是,空集合 != null 吧? - Vladislav Zorov
结果显然不是集合(并且名称具有误导性) - Ales Ruzicka
哦,应该是result而不是带s的 :) 抱歉,查询语法对我来说不是很自然。 - Vladislav Zorov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接