我有这个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 :(得分: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 };