Как это исправить Не могу неявно конвертировать Generi c .List <> в Generi c .List <> - PullRequest
2 голосов
/ 17 апреля 2020

Как я могу исправить Не могу неявно преобразовать System.Collections.Generic.List <RPHistory> в System.Collections.Generic.List <RPHistory> исключительную ошибку.

Я пытаюсь объединить две сущности вместе, чтобы получить единый список

Класс сущности RP:

 public class RP 
        {
            public int ID { get; set; }
            public int RPID { get; set; }
            public string Name { get; set; }
            public int ProductID { get; set; }
        }

Класс сущности RPHistory:

public class RPHistory: 
    {
        public int ID { get; set; }
        public int RPID { get; set; }
        public string Name { get; set; }
        public int ProductID { get; set; }
    }

И я создал этот третий класс

RpWithHistory Class:

public class RpWithHistory {
  public int ID;
  public int RPID;
  public string Name;
  public int ProductID;

  public List<RPHistory> History;
}

Linq Query

var RPs = await Context.RP.Where(b => b.ProductID  == request.ID)
                              .Select(x=> new RpWithHistory {
                                               ID = x.ID, 
                                               RPID = x.RPID, 
                                               Name = x.Name, 
                                               ProductID = x.ProductID, 
                                               History = Context.RPHistory
                                                                .Where(y=> y.RPID 
                                                                        == x.RPID)
                                                                .ToList()
                                               }
                                      ).ToListAsync();

Но я получаю эту ошибку,

>Cannot implicitly convert System.Collections.Generic.List <RPHistory> to
>System.Collections.Generic.List <RPHistory> exception error

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Я не уверен, зачем ты это делаешь. Могу ли я предложить это?

Вам не нужно go весь этот способ создания класса, который объединяет оба. Просто создайте свойство RP на вашем RP, которое указывает на объекты RPHistory.

public class RP 
{
    public int ID { get; set; }
    public int RPID { get; set; }
    public string Name { get; set; }
    public int ProductID { get; set; }
    public ICollection<RPHistory> HistoryList { get; set; } // Navigation Property
}

public class RPHistory: 
{
    public int ID { get; set; }
    public int RPID { get; set; }
    public string Name { get; set; }
    public int ProductID { get; set; }

    [ForeignKey(nameof(RPID))] // Identify the Foreign Key from RP Class
    public RP RP { get; set; } // Navigation back to RP
}

Затем вы можете объединить все в один список, используя LINQ:

var RPs = Context.RP.Where(rp => rp.ProductID  == request.ID)
                 .Include(rp=>rp.RPHistory) // This includes RPHistory
                 .ToList();
1 голос
/ 18 апреля 2020

Вам необходимо клонировать или создать новый список.

Вариант 1: использовать ConvertAll

List<RPHistory> pPHistoryCopy = rphWithHistory.RPHistory.ConvertAll(history => new RPHistory(rphWithHistory.RPHistory));

Вариант 2:

//Clone Extension
static class Extensions
{
    public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable
    {
        return listToClone.Select(item => (T)item.Clone()).ToList();
    }
}

Использовать расширение клона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...