0

我想将数据库模型映射到视图模型,同时对未映射的属性进行真正的错误查找:

映射的属性将类似于

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>

谢谢你的帮助。

4

1 回答 1

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>。)

于 2013-05-28T05:29:15.700 回答