[英]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.