LINQ:Nullable对象必须有一个值。

时间:2013-01-24 16:09:56

标签: linq sharepoint

让我先说一下我是LINQ的新手,这是我最初没有编写的代码,但我正在尝试修复。我已经对这个错误做了很多研究,但我还没有发现任何有用的东西。事实上,这种错误让我头晕目眩。总之...

我有一个LINQ查询,它从三个SharePoint列表中选择一些数据。这是:

    private void loadPEGrid(int id)
    {
        dc = new SpEntityDataContext(SPContext.GetContext(this.Context).Web.Url);

        EntityList<ProductDocumentMapItem> dMaps = dc.GetList<ProductDocumentMapItem>("Product Document Map");

        object mappedItems = null;

        mappedItems = from m in dMaps
                      join p in dc.PEProducts on m.ProductID.Value equals p.Id.Value
                      join d in dc.ProductDocuments on m.DocID.Value equals d.Id.Value
                      where m.ProductID.Value == id && m.ProductType == "PE"
                      select new { 
                          p.Grade, 
                          d.Path, 
                          d.DocumentType, 
                          d.Title, 
                          d.Name, 
                          Language = d.Language.Title, 
                          m.Id, 
                          DocId = m.DocID };

        GridViewProducts.KeyFieldName = "Id";
        GridViewProducts.DataSource = mappedItems;
        GridViewProducts.DataBind();
    }

以下字段可以为空:

  • m.ProductID
  • m.DocID
  • d.DocumentType
  • m.Id

当我调试时,这些都不会引发错误,但是当页面加载时它会: System.InvalidOperationException:Nullable对象必须具有值

这是否意味着我选择的某个字段为空,或者其中一个连接字段?检查数据后,我不认为是这种情况。如果您需要我的更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

  
    

System.InvalidOperationException:Nullable对象必须具有值

  

当您尝试获取可空类型的Value属性时,会抛出此异常。所以,这意味着以下一个或多个是真的:

  • dMaps中的至少一个对象的属性ProductID等于null
  • dMaps中的至少一个对象的属性DocID等于null
  • dc.PEProducts中的至少一个对象的属性Id等于null
  • dc.ProductDocuments中的至少一个对象的属性Id等于null
  • 不是通过查询引发的异常