多集合Linq查询异常:无法返回CredentialingRequestStatus集合
先明确:不一定是缺少Where()子句,你的问题大概率出在关联逻辑、数据匹配或者集合本身的问题上,以下是具体排查方向:
关联键是否正确
你第二个join用的是co.ID equals coi.ID,要确认coidCol集合里的ID字段是不是真的和companyCol的ID对应?比如如果coidCol是存储公司的COID记录,那关联键应该是co.COID equals coi.ID(假设Company表有COID字段),如果键错了,会导致匹配不到数据,自然返回空集合。内连接过滤了数据
LINQ的join默认是内连接,如果某个credentialingRequest对应的Company没有匹配的coid记录,这条数据会被直接过滤掉。如果需要保留所有credentialingRequest(哪怕没有对应的coid),要改成左连接:var query = from cr in credentialingRequests join co in companyCol on cr.CompanyID equals co.ID join coi in coidCol on co.ID equals coi.ID into coiGroup from coi in coiGroup.DefaultIfEmpty() // 左连接 select new CredentialingRequestStatus { ID = cr.ID, CompanyId = cr.CompanyID, COID = coi?.Value, // 注意空值处理 FacilityName = co.Name, StatusId = cr.StatusID, RejectionReason = cr.RejectionReason, RejectionNote = cr.RejectionNote, CreatedDate = cr.CreatedDate };数据源是否有数据
检查credentialingRequests、companyCol、coidCol这三个集合是不是本身就没有数据,或者数据的关联字段值不匹配(比如cr.CompanyID是null,或者co.ID在coidCol里找不到对应值)。属性类型是否匹配
确认CredentialingRequestStatus的每个属性类型和你赋值的字段类型一致:比如COID如果是int类型,coi.Value是不是int?如果类型不匹配,可能会抛出隐式转换异常,或者导致数据无法正确映射。
如果确实需要过滤特定条件(比如只查某个状态的请求),才需要加Where()子句,比如:
query = query.Where(cr => cr.StatusId == 1); // 假设StatusId=1是待审核状态
内容的提问来源于stack exchange,提问作者GoGetSOme

