LINQ to SQL-在两个嵌套集合之间筛选数据集



我在Visual Studio c#中有一个MVC 3项目。我有一个LINQ到SQL查询,它运行良好,并遵循stackoverflow上其他地方列出的示例:

使用linq和sql比较两个列表

我已经能够成功地减少我的两个嵌套集合匹配的结果。这是代码的一部分(来自上面链接的例子):

var anyDesiredSkills = canidateSkills.Any( c => desiredSkills.Select( ds => ds.SkillId ).Contains( c.SkillId ) );

我已经成功地适应了这一点,但现在我需要能够使用多个条件来过滤记录。我想知道是否有人能够调整以上内容,以展示如何包含多个条件?

让你了解一下我的目标是什么:

  1. 一个搜索页面,您可以在其中选择任意数量的联系人
  2. 添加到搜索条件中的每个联系人可能/可能没有分配"角色"。如果存在角色,则应将其考虑到查询中
  3. 基于此动态条件返回的结果

提前感谢您的任何帮助: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--"的值,这是一个插入到下拉列表中的选项。希望这对其他人有帮助!

最新更新