在linq我面临一个奇怪的问题。每当我尝试在bit datatype
子句中使用where
指定两列时,它都会返回 null 。但问题是我的表格中存在特定要求的数据。
var data = (from PD in C.KYC_PERSONAL_DETAILS
join IMG in C.KYC_UPLOAD_DETAILS on PD.ACCOOUNT_NO equals IMG.ACCOOUNT_NO
where ( PD.FILEFLAG == false) && (IMG.IsVerify == true )
select new
{
PD_ACCOUNT_NO = PD.ACCOOUNT_NO,
PD_NAME = PD.NAME,
IMG_Name = IMG.Name
}.ToList();
int count = data.Count(); //Here it shows 0 even though data exists in table.
相同的查询,如果我以SQL Query的形式写,然后工作并返回一行。
select * from KYC_PERSONAL_DETAILS, KYC_UPLOAD_DETAILS
where KYC_PERSONAL_DETAILS.FILEFLAG = false
AND KYC_UPLOAD_DETAILS.IS_VERIFY= true
//Here it is returning a row.
我只是想知道是否可以在 linq 的where子句中指定两个布尔数据类型和&&
运算符的列?如果是,那么请建议一种方式。
答案 0 :(得分:0)
经过试用和错误执行后,我发现了一种使LINQ查询正常工作的方法。虽然我仍然不知道它背后的原因,但如果我通过以下任何一种方式进行,它现在都在工作。在研究了背后的实际问题和逻辑之后,我会更新我的答案。
如果我写的是与
相同的查询1。
var data = (from PD in C.KYC_PERSONAL_DETAILS
join IMG in C.KYC_UPLOAD_DETAILS on PD.ACCOOUNT_NO equals IMG.ACCOOUNT_NO
where PD.FILEFLAG == false
where IMG.IsVerify == true
select new
{
PD_ACCOUNT_NO = PD.ACCOOUNT_NO,
PD_NAME = PD.NAME,
IMG_Name = IMG.Name
}.ToList();
int count = data.Count(); //Here it shows 1 data that exists in table.
<强> 2 强>
var data = (from PD in C.KYC_PERSONAL_DETAILS
join IMG in C.KYC_UPLOAD_DETAILS on PD.ACCOOUNT_NO equals IMG.ACCOOUNT_NO
where ( PD.FILEFLAG == false) & (IMG.IsVerify == true )
select new
{
PD_ACCOUNT_NO = PD.ACCOOUNT_NO,
PD_NAME = PD.NAME,
IMG_Name = IMG.Name
}.ToList();
int count = data.Count(); //Here it shows 1 data that exists in table.
通过在布尔数据类型的情况下编写相同的查询,它运行良好。 我认为由于使用短路运营商可能会出现问题。
所以,最后使用
&
代替&&
或使用两个where
在LINQ查询中,只要你想处理两个,它就能很好地工作 具有boolean
数据类型的列。将&&
用于其他数据类型是正常的,但是在布尔值的情况下,它可能会产生问题。
更新1
作为旁注
虽然使用第二选项 不推荐 ,正如Ivan在评论中所述。因为我正在使用
SQL SERVER 2008 R2
而且Ivan声称在非SQL数据库中使用&&
工作正常,而且我也可能面临SQL Server中的错误..