我很困惑。我有两个相同的语句,一个工作,另一个接收错误 - 值不能为空。 r参数名称源。从我读到的内容我收到错误,因为我的linq表达式中的某些内容为空。但是,据我所知,没有什么是空的。
第一个if语句有效。当一个人从刻录项目列表中选择“选择”时,BurnPiles列表将显示在BurnProject列表下方。 (这是有效的)。然后当一个人从BurnPiles列表中选择“选择”时,会在其下方显示RequestedBurns列表。这给了我null错误。有一段时间它确实起作用了。
我不知道出了什么问题。我知道RequestedBurn表从记录#2开始,但不应该与它有任何关系。我一直在使用的BurnPile记录已关联RequestedBurns。
//when 'Select' is chosen from the list of burn projects the list of burn piles
//associated with that specific burn project is display below it.
if (burnerID != null)
{
ViewBag.BurnerID = burnerID.Value;
viewModel.BurnPiles = viewModel.BurnProjects.Where(
b => b.BurnerID == burnerID.Value).Single().BurnPiles;
}
//when 'Select' is chosen from the list of burn piles the list of requested
//burns associated with that specific burn pile is displayed below it.
if (burnPileID != null)
{
ViewBag.BurnPilesID = burnPileID.Value;
viewModel.RequestedBurns = viewModel.BurnPiles.Where(
x => x.BurnPilesID == burnPileID).Single().RequestedBurns;
}
答案 0 :(得分:2)
如果您查看Where或Single的文档,您会看到null
是代表您的集合的参数的名称。因此,您似乎试图在viewModel.BurnProjects = null
引用上调用方法,如果viewModel.BurnPiles = null
或<ul>
<li><span>Link 1</span></li>
<li><span>Link 2</span></li>
<li><span>Link 3</span></li>
</ul>
则会出现这种情况。
答案 1 :(得分:1)
viewModel.BurnPiles = viewModel.BurnProjects.Where(
b => b.BurnerID == burnerID.Value).Single().BurnPiles;
可能将viewModel.BurnPiles设置为null。
或
viewModel.BurnPiles.Where(
x => x.BurnPilesID == burnPileID).Single()
没有返回任何内容,因此当您尝试访问RequestedBurns时,它会抛出异常。
答案 2 :(得分:1)
SingleOrDefault
还有overload,您可以在其中简化表达式。您还可以将它与null条件运算符组合使用(如果至少使用C#6)。
if (burnerID != null)
{
ViewBag.BurnerID = burnerID.Value;
viewModel.BurnPiles = viewModel.BurnProjects.SingleOrDefault(b => b.BurnerID == burnerID.Value)?.BurnPiles;
}