Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 执行linq语句时,行中缺少空值的数据库项_Sql_Database_Linq_Null_Missing Data - Fatal编程技术网

Sql 执行linq语句时,行中缺少空值的数据库项

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

下面是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["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'时类型推断失败。”