【发布时间】:2015-03-20 02:07:55
【问题描述】:
我有以下 linq 查询(很简单):
var jobs = from j in db.jobmsts
join jd in db.jobdtls on j.jobdtl_id equals jd.jobdtl_id
where j.jobmst_type != 1 && j.jobmst_prntid.Equals(folder.FolderID)
orderby j.jobmst_name
select new
{
JobID = j.jobmst_id,
JobName = j.jobmst_name,
Description = j.jobmst_desc,
Source = jd.Source
};
folder.FolderID 是一个可以为空的 int (int?),它作为参数传递到方法中。因此,当它为空时,查询不返回任何结果。但是如果我在 TSQL 中执行相同的查询:
select * from jobmst j
join jobdtl jd on j.jobdtl_id = jd.jobdtl_id
where j.jobmst_type != 1 and j.jobmst_prntid is null
我有 6 条记录。奇怪的是,如果我用“null”替换“folder.FolderID”(在 linq 代码中),它确实返回 6 条记录。因此,显然“null”和具有空值的对象之间存在差异。我只是不知道它是什么以及如何解决这个问题。
仅供参考,我的代码使 where 子句看起来像这样:
where j.jobmst_type != 1 && j.jobmst_prntid == folder.FolderID
但它也没有产生任何结果。
任何帮助将不胜感激。
【问题讨论】:
-
执行该 linq 时 SQL Profiler 会显示什么?
-
另外 - 您正在这里构造一个 linq 查询对象,但没有执行它(至少在您与我们共享的代码中)。
-
我不熟悉 SQL Profiler。 db 对象是添加到我的项目中的 DataClasses1DataContext 对象。
-
db.log 的输出是“WHERE ([t0].[jobmst_type] @p0) AND ([t0].[jobmst_prntid] = @p1)”
标签: c# sql-server linq