2009-05-23 24 views
0

背景:View ModelにMultiSelectListを持つASP.NET MVCビューページがあります。私はそのMultiSelectListオブジェクトからSelectedValuesのリストでラベルを設定したいと思います。リストはIDNameの種類とMultiSelectList内に格納されていますIEnumerableおよび文字列配列 - 一致する値を見つける

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

のでMultiSelectList.ItemsがIDNameのリストを含むIEnumerableをです。私はこのリストの上でforeachを実行し、各エントリの名前を取得するために.Nameをつかむことができます。しかし、私は唯一のIDが[]の文字列のように見えるとのように見えるMultiSelectList.SelectedItems、である場合にこれをしたい:だから

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

、私はちょうどIDName.NameときIDNameを取得したいです。 IDはSelectedItemsリストにあります。

私はMVCとC#の両方にかなり新しいので、これを実行する最善の方法はわかりません。助言がありますか?

更新#2:

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

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

SelectedValuesは実際には文字列[]を含むIEnumerableです。

答えて

1

以下を試してください。

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

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

+0

非常に近い!実際の解決策(私の最初の投稿に間違っているので主に違いがあります)の私のアップデートをチェックしてください。ありがとうございました! – user101306

0

LINQを使用してlistidsに対してフィルタリングすることができます。

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name) 
関連する問題