无法将类型'System.Collections.Generic.IEnumerable <string>'隐式转换为'System.Collections.Generic.ICollection <x>'

时间:2015-11-17 12:30:47

标签: c# asp.net-mvc-4 generics type-conversion

我有这个模型,有三个相同模型的集合<AttendeesMeeting>

会议

[NotMapped]
[Display(Name = "xxxx", ResourceType = typeof(Resources.ReuniaoResources))]
public virtual ICollection<AttendeesMeeting> Required{ get; set; }

[NotMapped]
[Display(Name = "xxx", ResourceType = typeof(Resources.ReuniaoResources))]
public virtual ICollection<AttendeesMeeting> Informed{ get; set; }

[NotMapped]
[Display(Name = "xxxx", ResourceType = typeof(Resources.ReuniaoResources))]
public virtual ICollection<AttendeesMeeting> Optionals{ get; set; }

在方法中,可以获取一些值。

我希望我的三个模型对象只从返回的值中接收“登录”。

public Meeting GetReuniaoForEdit(int id)
{
    var model = this.context.Meetings.Find(id);

    var required = context.AttendeesMeeting.Where(x => x.IdReuniao == id && x.TypeAttendee == 1);
    var informed = context.AttendeesMeeting.Where(x => x.IdReuniao == id && x.TypeAttendee == 2);
    var optionals = context.AttendeesMeeting.Where(x => x.IdReuniao == id && x.TypeAttendee == 3);

    if (required.Any() || informed.Any() || optionals.Any())
    {
        //Login is a string
        model.required = required.Select(x => x.Login).ToList();
    }
}

错误:

model.required = required.Select(x => x.Login).ToList();
  

无法隐式转换类型   'System.Collections.Generic.List<string>'到   'System.Collections.Generic.ICollection<Models.AttendeesMeeting>'。一个   存在显式转换(您是否错过了演员?)

如何在模型集合中打开字符串列表?

有可能吗?

2 个答案:

答案 0 :(得分:1)

现在,通过.Select(x => x.Login).ToList(),您可以创建要分配给ICollection<AttendeesMeeting>的字符串列表。您可以通过多种方式解决此问题,例如:

  • 您可以更改模型,以便ICollection<AttendeesMeeting>替换为ICollection<string>。如果您只需要Login,那么您的模型应该针对此进行优化。
  • 您可以省略.Select(x => x.Login),然后将会议集合分配给模型中的属性;在您的视图中,仅显示模型的Login属性,并省略其余数据。
  • 如果您无法更改现有模型,我建议创建一个新的模型类,以准确存储您在特殊情况下所需的数据。在这种情况下,您可以将属性ICollection<string>添加到新模型中,并在特殊情况下使用此属性。

答案 1 :(得分:0)

我想你想要的是通过他们的login开会。因此,您需要进一步的步骤,因为required.Select(x => x.Login).ToList()只会选择会议的登录信息。但是,您需要进一步选择所有符合这些ID的会议:

var model = this.context.Meetings.Where(x => required.Select(y => y.Login).Contains(x.login));