Linq to Generic 列表 C# 数据过滤问题
Linq to Generic list C# Data Filtering issue
我在使用 C# 代码中的 linq 查询时遇到问题。我想排除具有 jobChangeTypeId Unallocate
或 Delete
但将它们带入结果集中的数据。
foreach (EmployeejobAudit empjobAudit in list)
{
int iEmployeeServiceId = empjobAudit.EmployeeServiceId;
PushNotificationData.jobAuditRow[] jobAuditList = empjobAudit.jobAuditList;
var jobCallQuery = (from job in jobAuditList
where ((from dc in dataset.jobCall select dc.jobId).Contains(job.jobId)) &&
( job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate || job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete)
select job).Distinct();
if (jobCallQuery.Any())
{
foreach (var item in jobCallQuery)
{
System.Diagnostics.Debug.WriteLine("jobId {0} Employee ServiceID {1} jobChange Type ID {2}", item.jobId, item.EmployeeServiceId, item.jobChangeTypeId);
}
}
}
如果您想同时排除它们,则它是 AND 而不是 OR
foreach (EmployeejobAudit empjobAudit in list)
{
int iEmployeeServiceId = empjobAudit.EmployeeServiceId;
PushNotificationData.jobAuditRow[] jobAuditList = empjobAudit.jobAuditList;
var jobCallQuery = (from job in jobAuditList
where ((from dc in dataset.jobCall select dc.jobId).Contains(job.jobId)) &&
( job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate && job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete)
select job).Distinct();
if (jobCallQuery.Any()) //Useless because the following foreach will do it for you, but you can test if != null
{
foreach (var item in jobCallQuery)
{
System.Diagnostics.Debug.WriteLine("jobId {0} Employee ServiceID {1} jobChange Type ID {2}", item.jobId, item.EmployeeServiceId, item.jobChangeTypeId);
}
}
}
您正在 ||
而不是 &&
。问题是当使用 ||
时,两个表达式之一将始终为真,因此被包括在内。
这个:
job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate
|| job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete
需要改成这样:
job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate
&& job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete
我在使用 C# 代码中的 linq 查询时遇到问题。我想排除具有 jobChangeTypeId Unallocate
或 Delete
但将它们带入结果集中的数据。
foreach (EmployeejobAudit empjobAudit in list)
{
int iEmployeeServiceId = empjobAudit.EmployeeServiceId;
PushNotificationData.jobAuditRow[] jobAuditList = empjobAudit.jobAuditList;
var jobCallQuery = (from job in jobAuditList
where ((from dc in dataset.jobCall select dc.jobId).Contains(job.jobId)) &&
( job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate || job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete)
select job).Distinct();
if (jobCallQuery.Any())
{
foreach (var item in jobCallQuery)
{
System.Diagnostics.Debug.WriteLine("jobId {0} Employee ServiceID {1} jobChange Type ID {2}", item.jobId, item.EmployeeServiceId, item.jobChangeTypeId);
}
}
}
如果您想同时排除它们,则它是 AND 而不是 OR
foreach (EmployeejobAudit empjobAudit in list)
{
int iEmployeeServiceId = empjobAudit.EmployeeServiceId;
PushNotificationData.jobAuditRow[] jobAuditList = empjobAudit.jobAuditList;
var jobCallQuery = (from job in jobAuditList
where ((from dc in dataset.jobCall select dc.jobId).Contains(job.jobId)) &&
( job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate && job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete)
select job).Distinct();
if (jobCallQuery.Any()) //Useless because the following foreach will do it for you, but you can test if != null
{
foreach (var item in jobCallQuery)
{
System.Diagnostics.Debug.WriteLine("jobId {0} Employee ServiceID {1} jobChange Type ID {2}", item.jobId, item.EmployeeServiceId, item.jobChangeTypeId);
}
}
}
您正在 ||
而不是 &&
。问题是当使用 ||
时,两个表达式之一将始终为真,因此被包括在内。
这个:
job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate
|| job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete
需要改成这样:
job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate
&& job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete