EF Core LINQ查询如何按ID列表过滤AuditQuestionnaires结果集
问题根源
你之前的循环写法错误是因为每次循环都会重新给查询结果变量赋值,最终只会保留最后一次循环匹配到的单条ID对应的记录,同时会产生多次不必要的数据库查询。
正确实现方式
你可以直接在LINQ查询的where条件中使用Contains方法,Entity Framework 会自动将该方法翻译为SQL的IN语句,一次性完成过滤,无需循环:
// 假设你存储ID的整数列表为 List<int> RecordIds questionnairs = from q in dbContext.AuditQuestionnaires .Include("Company") where q.Company != null && q.Company.RecordID == companyId && RecordIds.Contains(q.RecordID) // 新增ID列表过滤条件 select q;
如果需要兼容ID列表为空的场景(即ID列表为空时跳过该过滤条件),可以调整写法:
questionnairs = from q in dbContext.AuditQuestionnaires .Include("Company") where q.Company != null && q.Company.RecordID == companyId && (!RecordIds.Any() || RecordIds.Contains(q.RecordID)) select q;
内容的提问来源于stack exchange,提问作者Sameera Athukorala
相关产品推荐
相关产品推荐

