值不能为null,r参数名称源

时间:2016-08-08 15:58:16

标签: c# linq

我很困惑。我有两个相同的语句,一个工作,另一个接收错误 - 值不能为空。 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;

        }

3 个答案:

答案 0 :(得分:2)

如果您查看WhereSingle的文档,您会看到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;
}