0

我在 Visual Studio c# 中有一个 MVC 3 项目。我有一个运行良好的 LINQ to SQL 查询,并按照 stackoverflow 上其他地方列出的示例进行操作:

使用 linq to sql 比较两个列表

我已经能够成功地减少我的两个嵌套集合匹配的结果。这是起到作用的代码位(来自上面链接的示例):

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

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

为了让您了解我的目标是什么:

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

在此先感谢您的帮助:O)

4

2 回答 2

0

这是我使用的最终代码:

服务列表 = 服务列表。在哪里(

                    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 --' 的值,这是一个注入下拉列表的选项。希望这对其他人有帮助!

于 2013-08-08T14:56:36.100 回答
0

听起来您正在寻找类似的东西:

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)));
于 2013-08-07T15:18:49.717 回答