C#“无法隐式转换类型”相同的模型属性

时间:2018-07-02 17:48:33

标签: c# .net linq model-view-controller

我正在尝试在C#MVC .NET Visual Studio中使用ViewModel。我有一个充满数据的模式。它是这样构建的:

public class Offer
{
    public List<ProjectleaderModel> Projectleaders { get; set; } = new List<ProjectleaderModel>();
    public List<OfferManagerModel> OfferManagers { get; set; } = new List<OfferManagerModel>();
    public List<ProductModel> Products { get; set; } = new List<ProductModel>();
    public List<PersonModel> People { get; set; } = new List<PersonModel>();
    public string Administration { get; set; }
    public string Status { get; set; }
    public DateTime Applicationdate { get; set; }
    public DateTime Submitdate { get; set; }
    public Boolean CustomerAgreementBoolean { get; set; }
    public DateTime CustomerAgreementBooleanDate { get; set; }



}

public class ProjectleaderModel
{
    public int Id;
    public string Name;

}

在我的视图模型中,我试图将数据放入一个单独的列表中,我想变成一个下拉菜单:

    public List<Offer> Offermodel = new List<Offer>();
    public List<ProjectleaderModel> Projectleaders
    {
        get
        {
            return Offermodel.Select(x => x.Projectleaders).ToList();
        }
    }
如您所见,

Projectleadermodel类在模型中。 为什么会出现错误:

Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<EnqueryApp.Model.ProjectleaderModel>>' to 'System.Collections.Generic.List<EnqueryApp.Model.ProjectleaderModel>'

4 个答案:

答案 0 :(得分:4)

Offermodel.Select(x => x.Projectleaders)行将为您提供Offer类对象的集合,然后在其中列出它们。

但是您的Projectleaders属性的返回类型为List<ProjectleaderModel>

所以他们不是比赛。

您需要创建Projectleaders对象的列表以从该属性返回。

本质上:

return Offermodel.SelectMany(x => x.Projectleaders).ToList();

答案 1 :(得分:3)

如果您希望所有报价的所有项目负责人,请使用SelectMany

return Offermodel.SelectMany(x => x.Projectleaders).ToList();

答案 2 :(得分:1)

请注意,Offer.Projectleaders的类型为List<ProjectleaderModel>,因此您的Select将产生IEnumerable<List<ProjectleaderModel>>而不是所需的IEnumerable<ProjectleaderModel>。 Linq以SelectMany extension method的形式解决了这个问题。

鉴于您的Projectleaders可以阅读

public List<ProjectleaderModel> Projectleaders =>
        Offermodel.SelectMany(x => x.Projectleaders).ToList();

答案 3 :(得分:0)

   public List<Offer> Offermodel = new List<Offer>();
    public List<List<ProjectleaderModel>> Projectleaders
    {
        get
        {
            return Offermodel.Select(x => x.Projectleaders).ToList();
        }
    }

您正在做的是尝试获取项目负责人列表,但是项目负责人已经是一个列表对象,因此您正在获取列表的列表。