Не удается увидеть FirstOrDefault

#c# #linq

#c# #linq

Вопрос:

Любая помощь очень ценится, ребята!

в GetProductByID я получаю сообщение об ошибке «int не содержит определения для FirstOrDefault».

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using HomebaseSystemNew.Models;

namespace HomebaseSystemNew.Controllers
  {
    public class ProductRepository
   {

    public ProductsController GetProductID(int Pid)
        {
          Product db = new Product();

          return db.Pid.FirstOrDefault(db => db.Pid == Pid);
        }


   }




   }
  

Комментарии:

1. Ваша проблема не имеет ничего общего с MVC3. Вы просто FirstOrDefault неправильно используете. db.Pid является int , но для работы он должен быть перечислимым FirstOrDefault .

Ответ №1:

Также вам необходимо добавить using System.Пространство имен Linq для доступа к этим методам.

Ответ №2:

Звучит очень маловероятно, что вы хотите начать с Product экземпляра. Правильный код, скорее всего, будет выглядеть так:

 public Product GetProductByID(int id)
{
    return new DbContext().Products
                          .FirstOrDefault(p => p.Pid == id);
}
  

В конце концов, вы не можете логически перейти от одного продукта к коллекции продуктов, не говоря уже об одном идентификаторе продукта к коллекции . Вы не сказали, где находятся ваши данные или что-то в этом роде, но вам нужно обратиться FirstOrDefault к коллекции продуктов.

Ответ №3:

Из вашего кода видно, что db.Pid это целое число (Int32), а не an IEnumerable<T> .

LINQ Операторы определены на IEnumerable , а не Int32 .

По умолчанию это будет 0 .

Ответ №4:

Well int не содержит определения для FirstOrDefault , потому что это не тип списка.

Для этого вам понадобится список целых чисел:

 public ProductsController GetProductID(List<int> Pids)
{
    ....
}
  

или, что более вероятно

 public ProductsController GetProductID(int Pid)
{
    Product db = new Product();

    return db.Products.FirstOrDefault(db => db.Pid == Pid);
}
  

предполагая, что у вас есть таблица, вызываемая Product в вашей базе данных.

Ответ №5:

FirstOrDefault это метод расширения для IEnumerbale или IQueryable, вы пытаетесь вызвать его из целого числа.