在Linq中加入左键会出错

时间:2013-12-17 19:49:54

标签: c# linq linq-to-entities

Table : tblEmp 
EmpId  EmpName ManagerId
101    john     Null
102    jack     101

foll。查询给出了实现值为null的错误。我哪里错了。请注意EmpId& ManagerId实际上是表中的GUID。

使用c#,linq到实体

public DataTable GetData(guid id)
{
  var qry = from e in MYDB.tblEmps.where(e=>e.EmpId==id)
            join m in MYDB.tblEmps on e.ManagerId equals m.EmpId into emp_mgr
            from m in emp_mgr.DefaultIfEmpty()
            select new
            {
              name = m.empname ?? string.empty,
              id = e.managerid  //also tried e.managerid ?? guid.empty
            }
   DataTable dt = qry.ToDataTable();
   return dt;
}

2 个答案:

答案 0 :(得分:0)

你应该在select语句中检查null。你也有连接语法错误(应该是等于):

var qry = from e in MYDB.tblEmps.where(e=>e.EmpId==id)
          join m in MYDB.tblEmps on e.ManagerId equals m.EmpId into emp_mgr
          from m in emp_mgr.DefaultIfEmpty()
          select new
          {
              name = m != null && m.empname != null ? m.empname : string.empty,
              id = e.managerid  //also tried e.managerid ?? guid.empty
          }

答案 1 :(得分:0)

经过一些研究后,我怀疑当你在qry上调用ToDataTable()时, if (qry == null) return null; else return qry.ToDataTable(); 为空。所以我只想改变最后几行;

qry.ToDataTable()

您可以通过在当前qry行设置断点并确认{{1}}在此时是否为空来确认这是否真的是问题的根源但我非常有信心这是问题,因为空引用在LE查询中并不是真的。