让我先说我是 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.产品编号
- m.文档ID
- d.文档类型
- m.Id
当我调试时,这些都不会引发错误,但是当页面加载时,它会引发错误:System.InvalidOperationException:可为空的对象必须具有值
这是否意味着我选择的其中一个字段为 null,还是其中一个联接字段? 检查数据后,我认为情况并非如此。 如果您需要我的更多信息,请告诉我。
System.InvalidOperationException:可为空的对象必须具有值
当您尝试获取可为空值类型的 Value 属性时,将引发此异常。因此,这意味着以下一项或多项为真:
dMaps
中至少有一个对象的属性ProductID
等于 nulldMaps
中至少有一个对象的属性DocID
等于 nulldc.PEProducts
中至少有一个对象的属性Id
等于 nulldc.ProductDocuments
中至少有一个对象的属性Id
等于 null- 查询未引发异常