новичок: создание enum.FirstOrDefault (), получение «Не могу неявно преобразовать тип» - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу найти и вернуть первое CartLine, которое соответствует продукту в Cart с помощью метода FindProductInCartLines(int productId).Если вхождение не может быть найдено, верните null.

Однако компилятор выдает ошибку

Невозможно неявно преобразовать тип: CartLine в Product

с номером строки FirstOrDefault().

Я настоящий новичок в отношении лямбда-функций и делегатов.Я думал, что это уже разыменовано с line.Product.Id, но, очевидно, у меня какое-то недопонимание.

Я попытался использовать ответ JaredPar от: Создать IEnumerable .Find () НоЯ не вижу разницы между моим кодом и его.

public class CartLine 
{
    public int OrderLineId { get; set; }
    public Product Product { get; set; }
    public int Quantity { get; set; }
}

public IEnumerable<CartLine> Lines => GetCartLineList();

private List<CartLine> GetCartLineList()
{
    return new List<CartLine>();
}

public Product FindProductInCartLines(int productId)
{
    return Lines.FirstOrDefault(line => line.Product.Id == productId);
}

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Когда вы вызываете FirstOrDefault(), он возвращает объект того же типа, что и источник, в вашем случае это Lines, который имеет тип CartLine - вот почему вы получаете ошибку.Чтобы получить дочернее свойство от родителя, вам нужно добавить ссылку на свойство в свой вызов (с учетом нулевых значений).

Итак, в вашем случае вам понадобится:

public Product FindProductInCartLines(int productId)
{
    return Lines.FirstOrDefault(line => line.Product.Id == productId)?.Product;
}

Есливы не уверены в операторе ?., вы можете прочитать этот ответ для хорошего объяснения.

0 голосов
/ 20 сентября 2019
// The method return type is Product
 public Product FindProductInCartLines(int productId){
               return Lines.FirstOrDefault(line => line.Product.Id == productId);// this line return CartLine object;
           }

Вам следует изменить тип возвращаемого метода на CartLine

 public CartLine FindProductInCartLines(int productId){
               return Lines.FirstOrDefault(line => line.Product.Id == productId);
           }

Если вы хотите, чтобы он возвращал Product

 public Product FindProductInCartLines(int productId){
               return Lines.FirstOrDefault(line => line.Product.Id == productId)?.Product;
           }
...