我正在尝试在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>'
答案 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();
}
}
您正在做的是尝试获取项目负责人列表,但是项目负责人已经是一个列表对象,因此您正在获取列表的列表。