Кастинг Илистк ILIst - PullRequest
       4

Кастинг Илистк ILIst

0 голосов
/ 23 мая 2018

Попытка разыграть подобное

Products1 = (IList<ProductInfo>)basicProfile.Products2.Select(ToProductInfo)

Products1 -

public IList<ProductInfo> Products { get; set; }

Product2 -

public IList<Product> Products { get; }

Вот метод, который я применяю к каждому элементуProduct2

internal static ProductInfo ToProductInfo(Product product)
    {
        if (product == null)
        {
            return null;
        }

        return new ProductInfo
        {
            Id = product.Id,
            EffectiveTimestamp = product.EffectiveTimestamp,
            ExpiryTimestamp = product.ExpiryTimestamp
        };
    }

Product и ProductInfo имеют одинаковую структуру и практически идентичны

Я поймаю это

System.InvalidCastException : Unable to cast object of type 
'SelectArrayIterator`2[Domain.Product,WebApi.Contracts.ProductInfo]' to type 
'System.Collections.Generic.IList`1[WebApi.Contracts.ProductInfo]'.

Более того, он даже не попадает в ToProductInfoметод

1 Ответ

0 голосов
/ 23 мая 2018

Из-за того, как linq работает (отложенное выполнение) в Select, создайте IEnumerable

, чего вы хотите достичь, можно сделать, добавив ToList ()

Products1 = basicProfile.Products2.Select(ToProductInfo).ToList()

или в зависимости отв вашем случае определите Products1 как

public IEnumerable<ProductInfo> Products { get; set; }

для получения дополнительной информации, эта страница https://msdn.microsoft.com/en-us/library/bb308959.aspx и часть по оценке отложенного запроса

, которая позволяет вам связывать запросы linq безмногократное повторение вашей коллекции

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