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

5 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();
Run Code Online (Sandbox Code Playgroud)

Amy*_*y B 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}
Run Code Online (Sandbox Code Playgroud)

由于一切都很好且明确,因此应该可以正确输入。但是,人们会认为转换 paj.DateAvailable 就足够了,因此您的情况可能还有更多内容。