我在Visual Studio c#中有一个MVC 3项目。我有一个LINQ到SQL查询,它运行良好,并遵循stackoverflow上其他地方列出的示例:
使用linq和sql比较两个列表
我已经能够成功地减少我的两个嵌套集合匹配的结果。这是代码的一部分(来自上面链接的例子):
var anyDesiredSkills = canidateSkills.Any( c => desiredSkills.Select( ds => ds.SkillId ).Contains( c.SkillId ) );
我已经成功地适应了这一点,但现在我需要能够使用多个条件来过滤记录。我想知道是否有人能够调整以上内容,以展示如何包含多个条件?
让你了解一下我的目标是什么:
- 一个搜索页面,您可以在其中选择任意数量的联系人
- 添加到搜索条件中的每个联系人可能/可能没有分配"角色"。如果存在角色,则应将其考虑到查询中
- 基于此动态条件返回的结果
提前感谢您的任何帮助:O)
听起来你正在寻找类似以下的东西:
var desiredSkillIds = desiredSkills.Select(_=>_.SkillId).ToList();
var matchingContacts =
from contact in Contacts
where contact.Role == null || desiredRoles.Contains(contact.Role)
where contact.Skills.Any(cs=> desiredSkillIds.Contains(cs.SkillId))
select contact;
或者使用基于方法的语法:
var matchingContacts = Contacts
.Where(contact => contact.Role == null || desiredRoles.Contains(contactRole))
.Where(contact => contact.Skills.Any(cs => desiredSkillIds.Contains(cs.SkillId)));
这是我使用的最后一个代码:
servicelist=服务列表。其中(
d => d.ContactSelection.Any(
h => model.ContactFilter.Select(ds => ds.StaffNumber).Contains(h.StaffNumber)
&&
model.ContactFilter.Select(ds => ds.ContactRole).Contains(h.ContactRole) || model.ContactFilter.Select(ds => ds.StaffNumber).Contains(h.StaffNumber) && model.ContactFilter.Select(ds => ds.ContactRole).Contains("0"))
);
请注意,最后一个过滤器。Contains("0)是"--select role--"的值,这是一个插入到下拉列表中的选项。希望这对其他人有帮助!