0

让我先说我是 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

当我调试时,这些都不会引发错误,但是当页面加载时它会: System.InvalidOperationException: Nullable object must have a value

这是否意味着我选择的字段之一为空,或者连接字段之一?查了资料,我觉得不是这样的。如果您需要我提供更多信息,请告诉我。

4

1 回答 1

1

System.InvalidOperationException:可空对象必须有一个值

当您尝试获取可为空类型的Value属性时,将引发此异常。因此,这意味着以下一项或多项是正确的:

  • 中的至少一个对象的dMaps属性ProductID等于 null
  • 中的至少一个对象的dMaps属性DocID等于 null
  • 中的至少一个对象的dc.PEProducts属性Id等于 null
  • 中的至少一个对象的dc.ProductDocuments属性Id等于 null
  • 不是由查询引发的异常
于 2013-01-25T10:18:51.447 回答