看不到FirstOrDefault

时间:2011-10-17 12:38:44

标签: 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);
        }


   }




   }

5 个答案:

答案 0 :(得分:13)

此外,您需要添加使用System.Linq 命名空间来访问这些方法。

答案 1 :(得分:3)

您希望启动并使用Product实例。正确的代码更像是:

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

毕竟,您没有从单个产品到逻辑上获取产品集合,更不用说从单个产品ID到集合了。您尚未说明数据的位置或类似内容,但您需要将FirstOrDefault应用于产品的集合

答案 2 :(得分:0)

从您的代码中可以看出db.Pid是一个整数(Int32),而不是IEnumerable<T>

LINQ运算符在IEnumerable上定义,而不是Int32

默认情况下,它为0

答案 3 :(得分:0)

int不包含FirstOrDefault的定义,因为它不是列表类型。

您需要一个可以使用的int列表:

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

或更可能

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

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

假设您的数据库中有一个名为Product的表。

答案 4 :(得分:0)

FirstOrDefault是IEnumerbale或IQueryable上的扩展方法,您试图从整数调用它。