原始SQL工作,但它的LINQ因为null而抛出异常

时间:2017-10-26 14:14:01

标签: c# sql asp.net-mvc linq

以下是Raw SQL,它提供了4个不同的名称,因为我使用了 Distinct 关键字

var strSql = "select distinct emp.PK_EmployeeID as 'PK_EmployeeID' , "
            + "(emp.First_Name+ ' ' + emp.Last_Name) as 'EmployeeName'  ,"
            + "  emp.IsActive as 'IsActive' , "
            + "  c.CompanyName   as 'LegalEntity' "
            + " from tSMR_Employee as emp left "
            + " outer join tClientCompany as c on c.ClientNumber=emp.FK_CMPClientID "
            + " left outer join tSMR_Employee_RoleAssign as era on era.FK_EmployeeID=emp.PK_EmployeeID "
            + " where emp.FK_CMPClientID=" + FK_CMPClientID + " and emp.IsActive=" + IsActive;

if (FK_ClientRole_TypeID != 0)
{
    strSql = strSql + "    and era.FK_ClientRole_TypeID=" + FK_ClientRole_TypeID;
}

var list = db.Database.SqlQuery<QueryResult>(strSql).ToList();

但是当我尝试使其LINQ等效时......我得到了常见的

  

未设置对象引用

  var list = (
    from SMREmployee in db.tSMR_Employee.AsEnumerable()
    join ClientCompany in db.tClientCompany 
        on SMREmployee.FK_CMPClientID equals ClientCompany.ClientNumber
    join SMR_Employee_RoleAssign in db.tSMR_Employee_RoleAssign 
        on SMREmployee.PK_EmployeeID equals SMR_Employee_RoleAssign.FK_EmployeeID 
        into tmp_SMR_Employee_RoleAssign
    from lo_tmp_SMR_Employee_RoleAssign in tmp_SMR_Employee_RoleAssign.DefaultIfEmpty()

    where SMREmployee.IsDeleted == false 
    && SMREmployee.FK_SystemID == SystemID
    && (IsActive == 2 
        ? SMREmployee.IsActive == SMREmployee.IsActive 
        : IsActive == 1 
        ? SMREmployee.IsActive == true 
        : SMREmployee.IsActive == false)
    && (FK_CMPClientID == 0 
        ? SMREmployee.FK_CMPClientID == SMREmployee.FK_CMPClientID 
        : SMREmployee.FK_CMPClientID == FK_CMPClientID)
    && (FK_ClientRole_TypeID == 0 
        ? lo_tmp_SMR_Employee_RoleAssign.FK_ClientRole_TypeID == lo_tmp_SMR_Employee_RoleAssign.FK_ClientRole_TypeID 
        : lo_tmp_SMR_Employee_RoleAssign.FK_ClientRole_TypeID == FK_ClientRole_TypeID)

    select new
    {
        PK_EmployeeID = SMREmployee.PK_EmployeeID,
        IsActive = SMREmployee.IsActive,
        EmployeeName = Convert.ToString(SMREmployee.First_Name) 
            + " " 
            + Convert.ToString(SMREmployee.Middle_Name) 
            + " " 
            + Convert.ToString(SMREmployee.Last_Name),
        LegalEntity = ClientCompany.CompanyName
    }).OrderBy(t => t.PK_EmployeeID).Distinct();

错误.....我猜我在查询中犯了一些错误

0 个答案:

没有答案