LINQ,Left Join,抛出异常......失败,因为具体化值为null

时间:2010-11-04 15:27:00

标签: c# linq

我很难过,我怎么解决这个问题?我查询中的ProductAvailability表没有找到每个产品的记录,每次运行时都会抛出以下错误。

  

转换为值类型'DateTime'失败,因为具体化值为null。结果类型的泛型参数或查询必须使用可空类型。

如何修复此错误?我尝试将paj.DateAvailable转换为(DateTime?)并检查null,但似乎没有解决问题。嗯?

这是我的查询。有什么想法吗?

var query = (from p in entities.Products
             join pa in entities.ProductAvailabilities on p.ProductId equals pa.ProductId into joinProductAvailabilities
             from paj in joinProductAvailabilities.DefaultIfEmpty()
             where  ps.IsActive
             select new { ProductId = p.ProductId, DateAvailable = paj.DateAvailable }).Distinct();

1 个答案:

答案 0 :(得分:1)

您可以尝试明确声明结果的类型。

public class MyProductQueryResult
{
  public int ProductId {get;set;}
  public DateTime? DateAvailable {get;set;}
}


from p in entities.Products 
from paj in p.ProductAvailabilities.DefaultIfEmpty()
select new MyProductQueryResult()
  {ProductId = p.ProductId, DateAvailable = paj.DateAvailable}

由于事情很好而且明确,所以这应该是正确的输入。但是,人们会认为投射paj.DateAvailable就足够了,所以可能会有更多的情况发生。