2013-05-28 29 views
0

我想將數據庫模型映射到視圖模型,同時分割爲未映射的屬性的真正假查找:Linq IGrouping,ILookup或IDIctionary劃分並映射到新的IEnumerable

對應的屬性會像

public IDictionary<bool,IEnumerable<SelectListItem>> 
    NoConsentAttemptReasons { get; set; } 

,這樣我可以通過

foreach (SelectListItem item in NoConsentAttemptReasons[true]) 

迭代,但我不確定的LINQ實現這一目標。試圖重複排列,包括:

model.NoConsentAttemptReasons = ScreenService 
     .GetNoConsentReasons() 
     .ToLookup(r=>r.Unaware, r => new SelectListItem 
{ 
    Text = r.Description, 
    Selected = model.NoConsentAttemptId == r.Id, 
    Value = r.Id.ToString() 
}); 

,但當然我不是映射到<布爾,IEnumerable的<SelectListItem> >而是<布爾,selectListItem >

感謝您的幫助。

回答

3

我懷疑你實際上想你的財產是類型

ILookup<bool, SelectListItem> 

不要忘記,ILookup<TKey, TElement>聲明爲:

public interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>> 

(也實現非通用IEnumerable,但現在讓我們忽略)

因此,查找的任何元素都已實現IEnumerable<TElement> - 你幾乎可以肯定不需要在它周圍增加一層IEnumerable<>

例如,如果你申報財產爲:

public ILookup<bool, SelectListItem> NoConsentAttemptReasons { get; set; } 

,那麼你可以這樣寫:

foreach (SelectListItem item in NoConsentAttemptReasons[true]) 
{ 
    ... 
} 

實現IDictionary<,>,但它實際上是簡單的這方式 - 因爲查找將返回一個未知密鑰的空序列,而不僅僅是失敗。

(在我開始回答這個問題的版本,屬性是ILookup<bool,IEnumerable<SelectListItem>>類型的我不知道你爲什麼改變了對IDictionary<bool,IEnumerable<SelectListItem>>,但我還是想你想ILookup<bool, SelectListItem>。)

+0

謝謝你 - 你是絕對正確的我不需要額外的層 - 非常感謝你 – Brent