Sql 执行linq语句时,行中缺少空值的数据库项
下面是sql查询:Sql 执行linq语句时,行中缺少空值的数据库项,sql,database,linq,null,missing-data,Sql,Database,Linq,Null,Missing Data,下面是sql查询: Select distinct A.CategoryName, A.CategoryID, B.ProjectID from [EvalTool].[dbo].[Category] A Left Join [EvalTool].[dbo].[CategoryAndProject2] B On A.CategoryID = B.CategoryID AND B.ProjectID = 65 还有希望相等的linq声明: int pID = (int)Session["pro
Select distinct A.CategoryName, A.CategoryID, B.ProjectID
from [EvalTool].[dbo].[Category] A
Left Join [EvalTool].[dbo].[CategoryAndProject2] B
On A.CategoryID = B.CategoryID AND B.ProjectID = 65
还有希望相等的linq声明:
int pID = (int)Session["projectSession"];
ViewData.Model = (from c in _db.Category
join r in _db.CategoryAndProject2
on c.CategoryID equals r.CategoryID into join1
from j in join1.DefaultIfEmpty()
where j.ProjectID == pID
select new CategoryDTO
{
CatID = c.CategoryID,
CatName = c.CategoryName,
ProjID = (int) j.ProjectID
}).Distinct().ToList();
sql语句的结果如下表所示:
CategoryName ID ProjectID
- - - - - - - - - - - - - - - - - -
x 1 NULL
y 2 NULL
z 3 NULL
m 4 NULL
n 5 NULL
i 6 NULL
o 7 NULL
r 8 NULL
s 9 65
u 10 65
而linq语句只列出了2行,这些行没有空条目
CategoryName ID ProjectID
- - - - - - - - - - - - - - - - - -
s 9 65
u 10 65
但我需要在视图中使用空条目的行
我如何确保也选择这些
提前多谢
标记有问题的线
where j.ProjectID == pID
在ProjectID
上进行筛选,并且在逻辑上不会返回空行,除非pID
本身为空。在您的情况下,它似乎是65
,因此该行应更改为
where j.ProjectID == pID || j.ProjectID == null
或者,如果要将其放入联接的部分,可以执行以下操作:
from c in _db.Category
join r in _db.CategoryAndProject2
on new {c.CategoryID, ProjectID = pID} equals new {r.CategoryID, r.ProjectID}
into join1
接下来是作业
ProjID = (int) j.ProjectID
在中选择语句将失败。您必须决定如何处理它。非常感谢。现在我只需要找到一种方法,如何将j.Project处理为可空。@marko_-tek-Sure。最简单的可能是将CategoryDTO.ProjID
修改为int?
,如果您的业务逻辑允许将ProjID声明为int?工作正常,但斗争仍在继续。现在,当我额外使用orderby语句时,会收到不同的结果。根据是否按CategoryName或CategoryID排序,结果由6个或7个条目组成。这怎么可能?不仅计数不同,我也看到了不同rows@marko_tek如果没有看到你得到的确切结果和你正在做的查询,我不确定。我建议你打开一个新问题并解释你的新问题,如果你愿意的话,可以链接回这个问题。我发现不同结果的原因是,我使用你的where语句进行过滤。我想我需要先过滤linq语句的on部分。但是你的建议不起作用。“join子句中某个表达式的类型不正确。调用'GroupJoin'时类型推断失败。”