分组,查找或字典划分和映射到新的IEnumerable
本文关键字:映射 IEnumerable 划分 查找 字典 分组 | 更新日期: 2023-09-27 18:15:43
我想将一个数据库模型映射到一个视图模型,同时在一个属性上划分一个真假查找,不映射:
映射属性类似于
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,>>而是<bool,选择>
感谢您的帮助
我怀疑你实际上希望你的属性类型为
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>
。)