2017-04-15 28 views
0

在linq中我遇到了一個奇怪的問題。每當我試圖指定bit datatypewhere子句中的兩列時,它將返回null。但事情是數據是存在與我的表中的具體要求。檢查Linq中布爾數據類型的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查詢的形式然後工作和返回一個行。

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與否的條款?如果是,那麼請建議一種方法。

+0

檢查您的LINQ返回任何記錄*不* 'where'和'select'部分。 – dotNET

+0

如果不是,這很可能是數據類型問題,從您的SQL語句中可以看出(您使用的是字符串值而不是布爾值)。 – dotNET

+0

即使我在SQL中使用布爾值,它也在工作。 – Chirag

回答

0

試用和錯誤執行後,我找到了一種方法來使我的LINQ查詢工作。雖然我仍然不知道它背後的原因,但是現在如果我按照以下任何一種方式進行操作,它現在正在工作。在研究了背後的實際問題和邏輯之後,我會更新我的答案。

如果我寫的查詢相同

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. 

通過布爾數據類型的情況下編寫相同的查詢它是工作好。 我認爲可能會有一個問題,因爲使用短路操作。

所以,在年底或者使用&代替&&或LINQ查詢使用兩個where 將工作做好,只要你想處理兩個 列與boolean數據類型。對其他數據類型使用&&是可以的,但在布爾值的情況下可能會產生問題。

更新1

作爲一個側面說明

雖然使用第二選項是不建議在評論伊萬說。因爲我使用SQL SERVER 2008 R2和伊萬聲稱,在非SQL數據庫使用&&工作正常,它也有可能是我可能會面臨在SQL Server中的錯誤..