帮助解决LINQ查询问题

时间:2010-10-11 06:37:24

标签: c# 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:所有这些都是字符串数据类型。

3 个答案:

答案 0 :(得分: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}

答案 1 :(得分:0)

  

为什么不返回任何东西?

有两种可能性:

1)连接为空,即没有项目,客户端和作业具有匹配的ID。

2)对于连接中的所有记录,where子句为false。

要解决此问题,您必须删除where子句和/或某些已连接的表,以查看获取结果所需的内容。

答案 2 :(得分: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 };