2016-04-15 8 views
1

In meiner Ansicht() habe ich viele Kontrollkästchen mit attr name = "Typen". In meinem ActionResult habe ich einen List-Typen wie Parameter, und ich foreach-Schleife, um in List jede Typ-ID zu suchen und einen Where() - Filter in meinem LINQ-Ausdruck hinzuzufügen. Wenn ich viele Arten wähle, ist die Rückkehr nur ein Resultat und nicht alles, was ich wählte. Aussehen:LINQ Ausdruck in foreach Schleife

[HttpPost] 
public ActionResult Index(List<int> types) { 
    var variable = from s in MyViewModel select s; 

    foreach(var type in types) { 
    variable = variable.Where(x => x.TypesId == type); 
    } 

    return View(MyViewModel); 
} 

Gibt es eine andere Möglichkeit, dies zu tun?

Vielen Dank !!

+0

Also Sie suchen Typ == 1 oder Typ == 2? – Rob

Antwort

2
variable = variable.Where(x => types.Contains(x.TypesId)); 

Dies sollte Ihnen alle Werte, wenn Sie nur einen wollen, fügen Sie .FirstOrDefault() am Ende

+0

Danke !!!!!!!!!! –

+0

Wenn es half, akzeptiere die Antwort bitte. Vielen Dank –

0

make attr Namen name = "Typen" zu name = "Typen []"

und es wird von ausgewählten Werten posten Array

1

Es gibt einige Probleme in Ihrem Code, egal, was anderer Teil von Code gibt Ihre Return-Anweisung immer alle MyViewModel Sammlung zurück.

Andere Problem ist Ihr Code überschreiben variable innerhalb der Schleife.

Ich denke, das ist, was Sie brauchen.

return View(MyViewModel.Select(s=> types.Any(t=>t.type == s.TypesId)); 
+0

@FabricioOliveria haben Sie diesen Ansatz versucht? –

0

Die variable wird zurückgesetzt jede foreach Iteration. Erstellen Sie eine List und fügen Sie sie in foreach Block hinzu.