2009-05-23 44 views
0

背景:我有一個ASP.NET MVC視圖頁面,在View Model中有一個MultiSelectList。我想用該MultiSelectList對象中的SelectedValues列表填充標籤。該列表存儲在MultiSelectList內用型IDName的: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:

好的,我正在密集。這工作:

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 2009-05-26 00:30:16

0

您可以使用LINQ過濾listids

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name) 
相關問題