我正在尝试学习LINQ,我遇到了一个我无法理解的null ref异常错误的问题。
我的项目/意图概述:我在数据库中有2个表。一个是客户,一个是订单。 Customers表具有ID,Name列。 Orders表具有orderID,Description和CustomerID列。
Customers
ID Name
1 eeee
2 dddd
3 ffff
Orders
ID Description CustomerID
1 sdffds 2
2 dsfasdf 2
3 fjdsa 1
4 dfsa 3
我要做的是选择并仅显示包含超过1个订单的客户(在这种情况下,只有ID为2的客户)。
我有一个ViewModel类
public class ViewModel
{
public List<Customer> Customers { get; set; } //list of customer objects
public List<Order> Orders { get; set; } //list of customer objects
}
在我的家庭控制器的索引操作中,我有:
public ActionResult Index()
{
Context db = new Context(); //create new Context Object named db which contains lists of objects pulled from database server
ViewModel model = new ViewModel(); //create new ViewModel Object named model which contains lists of objects
model.Customers = db.Customers.ToList(); //pull Customers data table from db
var groups = db.Orders.GroupBy(custgroup => custgroup.CustomerId).Where(group => group.Count()>1); //pull Orders data table from db and group by CustomerID, and choose only groups with more than 1 records.
foreach (var group in groups)
{
foreach (Order order in group)
//foreach (var order in group)
{
model.Orders.Add(order); //***The null exception occurs here where 'Orders' is null. Check for null before calling method***
}
}
return View(model);
}
实际上,我要做的是按客户分组订单并选择我选择的订单组。然后将组中的各个记录放回原始对象格式。从调试开始,我想我已经实现了过滤过程。当我尝试将记录放回到模型中时,会出现问题。订单&#39;名单。
null异常发生在内部foreach内部,其中&#39; Orders&#39; list为null。错误指示是.Orders列表为空和/或尚未声明。但我认为该列表是在顶部的ViewModel model = new ViewModel();
语句中声明的。
如何修复此null异常错误? TIA。
答案 0 :(得分:4)
您忘记初始化model.Orders。
放
model.Orders = new List<Order>();
创建模型后它应该可以工作。