0

背景: ビュー モデルに MultiSelectList を含む ASP.NET MVC ビュー ページがあります。その MultiSelectList オブジェクトからの SelectedValues のリストをラベルに入力したいと考えています。リストは、IDName のタイプで MultiSelectList 内に格納されます。

public class IDName {
    public int ID {get; set;}
    public string Name {get; set;}
}

したがって、MultiSelectList.Items は IDName のリストを含む IEnumerable です。このリストに対して foreach を実行し、.Name を取得して各エントリの名前を取得できます。しかし、ID が MultiSelectList.SelectedItems にある場合にのみこれを行いたいと思います。これは string[] のように見え、次のようになります。

["1", "3", "4"]

したがって、IDName.ID が SelectedItems リストにあるときに IDName.Name を取得したいだけです。

私はMVCとC#の両方にかなり慣れていないので、それを行う最善の方法がわかりません。助言がありますか?

更新 #2:

OK、私は密集していました。これは機能します:

list.Items
  .Cast<IDName>()
  .Where(x => list.SelectedValues.Cast<string>().Contains(x.ID.ToString()))

SelectedValues は、実際には string[] を含む IEnumerable です。

4

2 に答える 2

1

以下を試してください。

var selected = MultiSelectList.Items
  .Cast<IDName>()
  .Where(x => MultiSelectList.SelectedItems.Contains(x.Name));

これにより、MultiSelectList.Items コレクション内のすべての項目が処理されます。次に、それらすべてを厳密に型指定された IDName インスタンスにキャストします。where 句は、Name フィールドが SelectedItems 配列のエントリと一致するアイテムのみにコレクションをフィルター処理します。

于 2009-05-23T15:03:12.630 に答える
0

LINQ を使用してlistに対してフィルター処理できますids

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name)
于 2009-05-23T15:05:04.030 に答える