Linq到通用列表C#数据过滤问题

Linq到通用列表C#数据过滤问题,c#,linq,filtering,generic-programming,C#,Linq,Filtering,Generic Programming,我在c代码中跟踪linq查询时遇到问题。我想排除jobChangeTypeId未分配或删除但会将其带到结果集中的数据 foreach (EmployeejobAudit empjobAudit in list) { int iEmployeeServiceId = empjobAudit.EmployeeServiceId; PushNotificationData.jobAuditRow[] jobAuditList = empjobAudit.jobAuditList;

我在c代码中跟踪linq查询时遇到问题。我想排除jobChangeTypeId
未分配
删除
但会将其带到结果集中的数据

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);
         }
     }
}

这是一个,而不是一个或,如果你想把它们都排除在外

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

!=&&=
将两者都排除。如果您只想包含这些内容,请使用
=
|
,谢谢您的回复。.Any()之后的for循环只是为了测试结果集,一旦它满足逻辑,我就不再需要它,我使用ElementAt(0)来检索记录。好吧,但这不是我的重点。我刚才说过.Any()是无用的,因为如果jobCallQuery是一个空列表,并且没有错误,foreach将什么都不做。但是在.Any()块中的循环之后可能还有其他代码。
job.jobChangeTypeId != (int) Common.jobChangeTypeId.Unallocate  
&& job.jobChangeTypeId != (int) Common.jobChangeTypeId.Delete