采取以下措施:
public class ClassA
{
public int ID { get; set; }
public ICollection<ClassB> ClassBs { get; set; }
public bool ChangeMe { get; set; }
}
public class ClassB
{
public int ID { get; set; }
public string test { get; set; }
public bool bar { get; set; }
public ClassA ClassA { get; set; }
public int ClassAID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我加载了一个 ClassB 对象,我想运行一些代码来执行一些操作,然后将 bar 更改为 true。
完成此操作后,如果 A 类的 ClassBs 集合中的每个 ClassB 都有 …
我基本上试图迭代大量数据并将返回的数据查询转换为视图模型中更有限的对象.
我没有做大量代码,而是在列表中调用.ForEach(),然后在视图模型列表中添加一个新条目.
这很好用,但是,有一个属性(Address)是可选的.
当我到达可选项时,NullReferenceException如果DB中的项目没有条目,我会得到.
代码示例是:
var tmp = _context.Person.Include(x => x.Address).ToList();
tmp.ForEach(x => vm.List.Add(new IndexListItem()
{
Name = x.Name,
Address = x.Address.FirstLine + " " + x.Address.SecondLine,
ID = x.ID
}));
Run Code Online (Sandbox Code Playgroud)
我从这个网站上的不同答案中发现,如果我更改地址行,它会显示:
Address = x.Address?.FirstLine + " " + x.Address?.SecondLine,
Run Code Online (Sandbox Code Playgroud)
当我点击一个空条目时,代码现在可以工作了tmp.
我不明白这一点,因为Address属性tmp已经允许空值,并且视图模型上的Address属性允许空值,所以,为什么更改行突然不会返回错误?
另外,我不必这样做x.Address?.FirstLine?是因为这是一个字符串,字符串已经可以为空了吗?