在Linq

时间:2017-04-15 11:25:44

标签: c# linq join where-clause

在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子句中指定两个布尔数据类型和&&运算符的列?如果是,那么请建议一种方式。

1 个答案:

答案 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中的错误..