将对象与具有另一个数组的数组进行比较

时间:2015-10-12 17:45:18

标签: c# linq

我有一个模特组:

public class GroupModel
{
    [Key]
    public int GroupModelId { get; set; }

    [Required]
    [MaxLength(50)]
    [DataType(DataType.Text)]
    public string GroupName { get; set; }

    [Required]
    public virtual ICollection<FocusArea> FocusAreas { get; set; }

    ...

模特聚焦:

public class FocusArea
{
    public int FocusAreaId { get; set; }
    public FocusEnum Focus { get; set; }

    public List<ApplicationUser> ApplicationUser { get; set;  }

    public virtual ICollection<GroupModel> GroupModel { get; set; }


public enum FocusEnum
{
    Psych,
    Medical,
    LivingWith
}

Group and Focus拥有多对多的关系。我的控制器正在接收:

public ActionResult GroupSearch(string[] focusSelected) // Values possible are Pysch, Medical and LivingWith
{
    List<GroupModel> groups;

    ...

问题:我想选择focusSelected数组中包含所有焦点的组。

我尝试过的事情:

groups = groups.Where(t => t.FocusAreas.Where(x => focusSelected.Contains(x.Focus))).ToList()).ToList();

显然不行。有没有人有另一个想法?

3 个答案:

答案 0 :(得分:1)

这可能对您有所帮助

 var result = groups.Where(g => g.FocusAreas.All(f => focusSelected
              .Any(fs => (FocusEnum)Enum.Parse(typeof(FocusEnum), fs, true) == f.Focus)));

答案 1 :(得分:0)

Where需要一个返回bool的委托/表达式。在您的示例中 - 您将Where放在Where内,其中Where返回集合。 将内部Where更改为All应该可以解决问题:

var allSelParsed = focusSelected.Select(s => (FocusEnum)Enum.Parse(typeof(FocusEnum), s)
                                .ToList();
groups = groups.Where(gr => allSelParsed.All(selected => 
                                                gr.FocusAreas.Any(fc => 
                                                                    fc.Focus == selected)))
               .ToList();

答案 2 :(得分:0)

这应该给你预期的结果

var result = groups.Where(g => 
                      focusSelected.All(fs => 
                          g.FocusAreas.Any(fa => fa.ToString() == fs)));
相关问题