2010-10-11 130 views
1

我有這樣的LINQ查詢:幫助排除故障LINQ查詢

var returnList = from TblItemEntity item in itemList 
        join TblClientEntity client in clientList 
        on item.ClientNo equals client.ClientNumber 
        join TblJobEntity job in jobList 
        on item.JobNo equals job.JobNo 
        where item.ClientNo == txtSearchBox.Text //Is this filter wrong? 
        orderby client.CompanyName 
        select new { FileId = item.FileId, CompanyName = client.CompanyName, LoanStatus = item.LoanStatus, JobNo = job.JobNo, JobFinancialYE = job.JobFinancialYE, VolumeNo = item.VolumeNo }; 

爲什麼沒有這個返回什麼?

P/S:它們都是字符串數據類型。

+0

示例數據! (和他們的類型!) – 2010-10-11 06:39:31

+1

我們如何判斷過濾器是錯誤的還是加入?您是否嘗試通過刪除註釋行來進行調試? – Kobi 2010-10-11 06:39:34

+0

是否因爲我使用clientno加入表格,我無法使用clientno進行過濾。 – 2010-10-11 06:41:11

回答

3

您是否嘗試刪除部分連接以找出問題所在,然後將這些刪除的部分再一次添加回去?開始於:

var returnList = from TblItemEntity item in itemList 
       where item.ClientNo == txtSearchBox.Text //Is this filter wrong? 
       select new { FileId = item.FileId }; 

由於您正在進行內部連接,因此可能會有一個連接過濾掉所有項目。

編輯:當調試時不擴展返回類型,select new {FileId = item.FileId}是所有你需要調試。

+0

我也這麼認爲,這是導致問題的聯結。 – 2010-10-11 06:43:27

+0

任何加入我需要過濾的方法? – 2010-10-11 06:43:45

+1

當然你可以加入你需要過濾的變量。由於沒有示例數據,所以很難完全告訴你應該做什麼,也不知道你期望得到什麼結果。你可以嘗試一個左連接,但是這又取決於你想要的結果。 – 2010-10-11 06:47:02

0

爲什麼這不返回任何東西?

有兩種possibilites:

1)聯接是空的,也就是說,沒有項目,客戶和工作具有匹配的ID。

2)對於連接中的所有記錄,where子句爲false。

要解決此問題,您必須刪除where子句和/或某些已連接的表,以查看獲得任何結果所需的內容。

+0

1)join子句是正確的,我刪除它,它返回給我一些東西 – 2010-10-11 06:56:14

+0

2)我嘗試使用其他屬性(除了我用於加入),它的作品,但不是我曾經加入的那些。 – 2010-10-11 06:57:28

0

仍在等待該樣本數據。

你說你正在通過其他屬性過濾結果,爲什麼這應該有什麼不同?假設用戶輸入txtSearchBox具有合理的值,請嘗試將值打印到調試控制檯上,並查看您是否獲得了合理的結果。看看輸出窗口。試試這個版本的查詢:

Func<string,bool> equalsSearch = s => 
{ 
    var res = s == txtSearchBox.Text; 
    Debug.WriteLine("\"{0}\" == \"{1}\" ({2})", s, txtSearchBox.Text, res); 
    return res; 
}; 
var returnList = from TblItemEntity item in itemList 
       join TblClientEntity client in clientList 
        on item.ClientNo equals client.ClientNumber 
       join TblJobEntity job in jobList 
        on item.JobNo equals job.JobNo 
       //where item.ClientNo == txtSearchBox.Text //Is this filter wrong? 
       where equalsSearch(item.ClientNo) //use our debug filter 
       orderby client.CompanyName 
       select new { FileId = item.FileId, CompanyName = client.CompanyName, LoanStatus = item.LoanStatus, JobNo = job.JobNo, JobFinancialYE = job.JobFinancialYE, VolumeNo = item.VolumeNo };