由于Entity Framework Core上的空值,LINQ查询不返回所有结果

时间:2016-02-09 13:56:31

标签: linq entity-framework-core

我有两行测试数据,能够在没有任何问题的情况下撤回第一行,但无法返回第二行。挖掘和测试表明,这可能是由于AppovedByID列在未返回的行中为null。我已经看了但是无法弄清楚如何修改我的LINQ查询,因此即使子表因为空值而无法链接,它也会返回所有行。

查询:

    public JsonResult ChangeOrders()
    {
        var ChangeOrdersList = _DbContext.ChangeOrders
                                         .Include(co => co.ApprovalStatus)
                                         .Include(co => co.ApprovedBy)
                                         .Include(co => co.AssignedTo)
                                         .Include(co => co.CreatedBy)
                                         .Include(co => co.CurrentStatus)
                                         .Include(co => co.Impact)
                                         .Include(co => co.Priority)
                                         .Include(co => co.ChangeType)
                                         .Select(co => new ChangeOrderListVM()
                                         {
                                             ApprovalStatus = co.ApprovalStatus.Name,
                                             ApprovedBy = string.Concat(co.ApprovedBy.FirstName, ' ', co.ApprovedBy.LastName),
                                             AssignedTo = string.Concat(co.AssignedTo.FirstName, ' ', co.AssignedTo.LastName),
                                             CreatedBy = string.Concat(co.CreatedBy.FirstName, ' ', co.CreatedBy.LastName),
                                             CurrentStatus = co.CurrentStatus.Name,
                                             DateApproved = co.DateApproved,
                                             DateCompleated = co.DateCompleated,
                                             DateCreated = co.DateCreated,
                                             DateStarted = co.DateStarted,
                                             EstimatedEndDate = co.EstimatedEndDate,
                                             EstimatedStartDate = co.EstimatedStartDate,
                                             ID = co.ID,
                                             Impact = co.Impact.Name,
                                             Name = co.Name,
                                             Priority = co.Priority.Name,
                                             Reason = co.ReasonForChange,
                                             Type = co.ChangeType.Name
                                         }).ToList();

        return Json(ChangeOrdersList);
    }

ChangeOrders:

public class ChangeOrder
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public short? ApprovedByUserID { get; set; }
    public byte ApprovalStatusID { get; set; }
    public short AssignedToUserID { get; set; }
    public short CreatedByUserID { get; set; }
    public byte CurrentStatusID { get; set; }
    public DateTime? DateApproved { get; set; }
    public DateTime? DateCompleated { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime? DateStarted { get; set; }
    public DateTime EstimatedStartDate { get; set; }
    public DateTime EstimatedEndDate { get; set; }
    public byte ImpactID { get; set; }
    public byte PriorityID { get; set; }
    public byte TypeID { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string ReasonForChange { get; set; }        

    [ForeignKey("ApprovalStatusID")]
    public ChangeApprovalStatus ApprovalStatus { get; set; }

    [ForeignKey("ApprovedByUserID")]
    public User ApprovedBy { get; set; }

    [ForeignKey("AssignedToUserID")]
    public User AssignedTo { get; set; }

    [ForeignKey("CreatedByUserID")]
    public User CreatedBy { get; set; }

    [ForeignKey("CurrentStatusID")]
    public ChangeStatus CurrentStatus { get; set; }

    [ForeignKey("ImpactID")]
    public ChangeImpact Impact { get; set; }

    [ForeignKey("PriorityID")]
    public ChangePriority Priority { get; set; }

    [ForeignKey("TypeID")]
    public ChangeType ChangeType { get; set; }
}

用户:

public class User
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public short ID { get; set; }

    [Required]
    public string ADUserName { get; set; }

    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Required]
    public string Email { get; set; }

    [Required]
    public string Phone { get; set; }

    [Required]
    public DateTime LastUpdated { get; set; }
}

编辑: 这显然是Entity Framework 7(AKA Core)独有的,因为它在EF 6中工作正常。我实际上使用的是EF7,作为一个额外的测试,我更新了一行

ApprovedBy = string.Concat(co.ApprovedBy.FirstName, ' ', co.ApprovedBy.LastName),

并将其更改为此

ApprovedBy = "",

并且所有行都在返回,所以我尝试了

ApprovedBy = (co.ApprovedByUserID.HasValue) ? string.Concat(co.ApprovedBy.FirstName, ' ', co.ApprovedBy.LastName) : "",

但这给出了一个非常奇怪的错误:

  

关键字'附近的语法错误是'

0 个答案:

没有答案