2011-10-17 74 views
1

任何幫助是非常讚賞的傢伙!看不到FirstOrDefault

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); 
     } 


    } 




    } 
+0

你的問題與MVC3無關。你只是簡單地使用`FirstOrDefault`。 `db.Pid`是一個`int`,但它需要可枚舉才能使用`FirstOrDefault`。 – 2011-10-17 12:42:36

回答

0

從你的代碼看起來db.Pid是一個整數(Int32)已,不是一個IEnumerable<T>

LINQ運營商在IEnumerable而不是Int32上定義。

默認情況下它將是0

3

這聽起來不太可能,你想開始Product實例。正確的代碼更可能是這樣的:

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

畢竟,你不從邏輯單一產品得到的產品的集合,更別說從單一的產品ID到的集合。您尚未說明您的數據或類似信息的位置,但您需要將FirstOrDefault應用於產品的收藏

0

那麼int不包含FirstOrDefault的定義,因爲它不是列表類型。

你需要INTS的名單爲這個工作:

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

或更可能

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

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

假設你有一個表,你的數據庫稱爲Product

0

FirstOrDefault是IEnumerbale或IQueryable上的擴展方法,您試圖從整數中調用它。

7

另外您還需要使用System.Linq命名空間來添加以訪問這些方法。