C # "не может неявно преобразовать тип" с теми же свойствами модели - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь использовать ViewModel в C # MVC .NET Visual Studio. У меня есть этот режим, который заполнен данными. Он построен так:

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 голосов
/ 02 июля 2018
   public List<Offer> Offermodel = new List<Offer>();
    public List<List<ProjectleaderModel>> Projectleaders
    {
        get
        {
            return Offermodel.Select(x => x.Projectleaders).ToList();
        }
    }

То, что вы делаете, пытается получить Список Лидеров Проекта, но Лидеры Проекта уже являются объектом списка, поэтому вы получаете список из списка.

0 голосов
/ 02 июля 2018

Если вы хотите, чтобы все руководители проектов были из всех предложений, используйте SelectMany

return Offermodel.SelectMany(x => x.Projectleaders).ToList();
0 голосов
/ 02 июля 2018

Обратите внимание, что Offer.Projectleaders имеет тип List<ProjectleaderModel>, следовательно, ваш Select даст IEnumerable<List<ProjectleaderModel>> вместо желаемого IEnumerable<ProjectleaderModel>. У Linq есть способ обойти это в виде метода расширения SelectMany .

Учитывая, что ваш Projectleaders может читать

public List<ProjectleaderModel> Projectleaders =>
        Offermodel.SelectMany(x => x.Projectleaders).ToList();
0 голосов
/ 02 июля 2018

Строка Offermodel.Select(x => x.Projectleaders) даст вам коллекцию Offer объектов класса, из которой вы затем составите список.

Но тип возврата вашего Projectleaders свойства List<ProjectleaderModel>

Так что они не совпадают.

Вам необходимо создать список Projectleaders объектов для возврата из этого свойства.

По существу:

return Offermodel.SelectMany(x => x.Projectleaders).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...