簡體   English   中英

Linq IGrouping,ILookup或IDIctionary划分並映射到新的IEnumerable

[英]Linq IGrouping, ILookup or IDIctionary divide and map into new 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()
});

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

謝謝你的幫助。

我懷疑您實際上是希望您的財產屬於此類

ILookup<bool, SelectListItem>

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

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

(還實現了非通用的IEnumerable ,但現在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> 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM