【发布时间】:2013-10-10 18:31:03
【问题描述】:
我正在使用 MVC3、Razor、C#。
我有一些包含一些 LINQ 的 Razor 代码。它尝试从列表中获取值。有时列表为空。目前,应用程序因此引发了一个空异常,即“myCustomers”为空。
代码:
Model.myCustomers.First().Name
基本上“myCustomers”定义为:
public List<Customer> myCustomers
并由“LINQ to Entity”查询填充。
如果“myCustomers”为空,如何确保剃须刀代码不会崩溃。我不想为每个属性写很多“if (Name!=null)”类型的块。由于布局设计问题,我无法遍历所有属性。所以我需要改变:
Model.myCustomers.First().Name
以某种方式。
希望这个问题不会太令人困惑!
非常感谢。
编辑 1
我喜欢不返回空值而是空列表的逻辑。我尝试使用类似
return this._myCustomers ?? Enumerable.Empty<Customers>().ToList();
最好有办法在 Razor 页面的 LINQ 的一行中测试它是否为空,而不是在“IF”块中。
编辑 2
public static TValue SafeGet<TObject, TValue>(
this TObject obj,
Func<TObject, TValue> propertyAccessor)
{
return obj == null ? default(TValue) : propertyAccessor(obj);
}
所以:
Model.myCustomers.FirstOrDefault().SafeGet(m=>m.Name)
【问题讨论】:
-
myCustomers 也可以是一个空列表吗?如果可能的话,您还必须检查这一点,否则
First()将引发异常。
标签: c# asp.net-mvc asp.net-mvc-3 linq linq-to-entities