2015-10-12 72 views
2

我有一个模型组:一个数组进行比较的对象与另一个数组

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 
} 

集团和分众有不少一对多的关系。我的控制器正在接收:

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(); 

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

回答

1

这可能会帮助你

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

Linq的向导!谢谢,它工作! –

0

Where需要一个委托/表达式返回bool。在您的示例中 - 您将Where放入Where之内,其中Where返回集合。 更改内部WhereAll应该做的伎俩:

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(); 
0

这应该给您处处预期结果

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