Ошибка компиляции 'List<Customer>' does not contain a definition for 'Orders'

105
03 января 2021, 17:10

Выдаёт такую ошибку, что делать

'List' does not contain a definition for 'Orders' and no accessible extension method 'Orders' accepting a first argument of type 'List' could be found (are you missing a using directive or an assembly reference?) (CS1061) [Project_Geolab]

Код:

using System;
using System.Linq;
using Project_Geolab;
public class ShowCustomerInformations 
{
    private readonly string email;
    public ShowCustomerInformations(string email)
    {
        this.email = email;
    }
    public void Show()
    {
        using(Technic context = new Technic())
        {
            //var findedRecords = context.Customers.Where(r => r.Email == this.email).ToList();
            var findedRecords = context.Customers.Where(o => o.Email == this.email).ToList();
            if(findedRecords != null)
            {
                foreach(var item in findedRecords.Orders)
                {
                    var id = item.Id;
                    Console.WriteLine($"Id: {item.Id}, ProductName: {item.ProductName}, Quantity: {item.Quantity}, PurchaseDate: {item.PurchaseDate}");
                }
            }else
            {
                Console.WriteLine("Error");
            }          
        }
    }
}

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Customer
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [StringLength(45)]
    public string Email { get; set; }
    public int Age { get; set; }
    // Ссылка на заказы
    public virtual ICollection<Order> Orders { get; set; }
}
public class Order
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public DateTime PurchaseDate { get; set; }
    // Ссылка на покупателя
    public Customer Customer { get; set; }
}
Answer 1

findedRecords — это список пользователей. Orders — свойство одного отдельного пользователя. Ошибка говорит о том, что у класса «список» нету свойства «Заказы», что логично.

Если нужно обрабатывать заказы по всем пользователям, которые найдутся, то понадобится еще цикл:

//проверку на null можно убрать
//список всегда вернется, если никто не найден, то список будет пустой
//и ничего не произойдет
foreach(var customer in findedRecords) 
{
    foreach(var item in customer.Orders) 
    {
       //все остальное
    }
} 

Если же по e-mail всегда будет находится один пользователь, то Вам нужно получать одного пользователя, а не список:

//вместо findedRecords
var customer = context.Customers.Where(o => o.Email == this.email).SingleOrDefault();
if(customer != null)
{
     foreach(var item in customer.Orders)
     ...
READ ALSO
Для чего нужны делегаты в C#?

Для чего нужны делегаты в C#?

Разбираюсь в c# в частности с делегатами, возник вопрос зачем нужны делегаты если можно создать экземпляр класса и вызвать метод

129
Ошибка Failed to open the referenced table

Ошибка Failed to open the referenced table

Не получается настроить references в MySQL, не понимаю что делаю не правильно

244