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;
}
答案 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查询中并不是真的。