我想将数据库模型映射到视图模型,同时在未映射的属性上划分真正的错误查找:
映射的属性类似于
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()
});
但当然我没有映射到&lt; bool,IEnumerable&lt; SelectListItem&gt;&gt;而是&lt; bool,selectListItem&gt;
感谢您的帮助。
答案 0 :(得分: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>>
,但我仍然认为您需要{{1 }}。)