【问题标题】:Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'System.Collections.Generic.IEnumerable<Model>'无法将类型“System.Collections.Generic.List<int>”隐式转换为“System.Collections.Generic.IEnumerable<Model>”
【发布时间】:2017-05-25 04:01:07
【问题描述】:

使用Select() 时出现此错误

无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IEnumerable”。

SiteContext db = new SiteContext();
[Route]
public ActionResult Index()
{
    var model = new ViewModel();
    int UserID = int.Parse(User.Identity.GetID());
    model.Messages = db.Message.Where(m => m.ReceiverID == UserID || m.SenderID == UserID).Select(m=>m.SenderUser.Name).ToList();

    return View(model);
}

我该如何解决?

编辑:

public class MessageModel
{
    [Key]
    public int MessageID { get; set; }

    [Required(ErrorMessage = "Boş mesaj gönderilemez.")]
    public string MessageContent { get; set; }

    [Required]
    public int SenderID { get; set; }

    [Required]
    public int ReceiverID { get; set; }

    [Required]
    public DateTime SendingDate { get; set; }

    [Required]
    public bool IsSeen { get; set; }

    public virtual UserModel SenderUser { get; set; }
    public virtual UserModel ReceiverUser { get; set; }


    MessageModel() {
        SendingDate = DateTime.Now;
    }
}

用户模型:

public class UserModel
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int UserID { get; set; }

    [Required (ErrorMessage ="İsim alanı boş geçilemez.")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Soyadı alanı boş geçilemez.")]
    public string Surname { get; set; }


    [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
                       ErrorMessage = "E-Posta adresi geçersiz.")]
    [DataType(DataType.EmailAddress)]
    public string Mail { get; set; }

    [DataType(DataType.Password)]
    public string Password { get; set; }

    [NotMapped] // Does not effect with your database
    public string ConfirmPassword { get; set; }

    public int Gender { get; set; }
    [RegularExpression("^[0-9]*$", ErrorMessage ="Telefon numarası geçersiz.")]
    public string PhoneNumber{ get; set; }
    public int SmokeStatus { get; set; }
    public DateTime RegistrationDate { get; set; }

    [HiddenInput(DisplayValue = false)]
    public string ReturnUrl{ get; set; }
    [Range(1900,2000, ErrorMessage ="Doğum yılı 1900 ile 2000 yılları arasında olmalı.")]
    [Required(ErrorMessage ="Yaş alanı boş geçilemez.")]
    public int BirthYear { get; set; }

    public string FacebookID { get; set; }
    public bool Manager { get; set; }

    public int AccessFacebook { get; set; }
    public int AccessInstagram { get; set; }
    public int AccessPhoneNumber { get; set; }
    public int AccessTwitter { get; set; }

    public List<LookingForaMateModel> LFMate { get; set; }
    public List<LookingForaHome> LFHome { get; set; }
    public List<AlbumModel> Album { get; set; }
    public List<PropertyTransferModel> PropertyTransfer{ get; set; }

    [ForeignKey("SenderID")]
    public List<MessageModel> SenderUser { get; set; }

    [ForeignKey("ReceiverID")]
    public List<MessageModel> ReceiverUser { get; set; }



    public UserModel() {
        RegistrationDate = DateTime.Now;
    }


}

我想为我的网站提供“直接消息”,并且设计看起来像 facebook messenger,所以左侧有一个面板。我应该得到列表消息的发件人姓名和最后一条消息。但我做不到:)

【问题讨论】:

  • model.Messages 的类型是什么?
  • 请注明左操作数的类型。
  • 你能告诉我们什么是数据类型model.Messages吗?为什么要使用 select ?
  • 这里没有足够的上下文让任何人都能够回答您的问题。错误消息的原因很清楚,因为编译器消息本身很清楚,但是为什么您有一个名为Name 的字段的类型为int,以及为什么您认为可以从以下值的序列创建一个列表该字段,然后将其分配给期望完全不同类型的枚举的变量,根本不清楚。
  • 请分享 Message 的模型类。在查看您提到的代码和异常消息后,我相信您已将 [User.Name] 定义为 Int 。 !!

标签: c# asp.net-mvc entity-framework


【解决方案1】:

您仍未显示 ViewModel 类的代码。但假设 model.Messages 的类型为 List&lt;Message&gt;,以下应该可以工作:

    var model = new ViewModel();
    int UserID = int.Parse(User.Identity.GetID());
    model.Messages = db.Message.Where(m => m.ReceiverID == UserID || m.SenderID == UserID).ToList();

【讨论】:

    【解决方案2】:

    使消息类型为 IEnumerable

    【讨论】:

    • 通用
    • 是什么让您认为更改Messages 属性的类型甚至是一种选择?当然,如果它的类型为IEnumerable,它可以接受对任何IEnumerable 的引用,包括与预期完全不同类型的对象列表。但这并不意味着这样做会使代码的其余部分完全任何有意义。这里的目标是解决 OP 的问题,而不仅仅是以某种方式阻止编译器错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2013-05-14
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多