2015-10-12 143 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))); 
相關問題