2014-06-20 54 views
1

我只是在这里画一个空白。Asp.Net MVC C#不能隐式转换类型问题

我上 “购买= purchases.Where” 路线的错误是:

Cannot implicitly convert type 'System.Linq.IQueryable<WWLTracker.Models.StockPurchase>' to 'System.Data.Entity.DbSet<WWLTracker.Models.StockPurchase>'. An explicit conversion exists (are you missing a cast?)

我的域模型/类是:

public class StockPurchase 
{ 
    public int StockPurchaseId { get; set; } 
    [Required] 
    [Display(Name = "Date of purchase")] 
    [DataType(DataType.Date)] 
    public DateTime Date { get; set; } 
    [Required] 
    public double Amount { get; set; } 

} 

控制器:

// GET: /Popular/ 
    public ActionResult Index(DateTime? From, DateTime? To) 
    { 
     var purchases = db.StockPurchases; 

     if (From != null && To != null) 
     { 
      purchases = purchases.Where(x => x.Date >= From && x.Date <= To); 
     } 
     Return View(purchases.ToList()); 
    } 

我知道这是简单的东西 - 任何人都可以请告知我是什么mi ssing?

谢谢

马克

+0

SQL类型的日期和金额是? –

+0

尝试var purchases = db.StockPurchases.AsEnumerable()。AsQueryable()。ToList(); –

回答

3

类型的purchases从财产db.StockPurchases这是DbSet推断。 (这样的purchases类型将成为DbSet<WWLTracker.Models.StockPurchase>。你不能只是转换以后到IQueryable<WWLTracker.Models.StockPurchase>

您应该检查这两个结果是System.Linq.IQueryable<WWLTracker.Models.StockPurchase>之间的共享类型和purchases类型设置为。

试试这个:

IQueryable<WWLTracker.Models.StockPurchase> purchases = db.StockPurchases; 

... 
+1

或db.StockPurchases.AsQueryable()); ?? – Neel

+1

谢谢 - 工作。只要SO允许,我会将其标记为答案。欢呼,并感谢其他建议。 – Mark

+1

我只是问我甚至不确定..很高兴知道这是否值得使用它:) – Neel

1

这里你购买的分配DbSet可变购买

var purchases = db.StockPurchases; 

,然后你想分配给它的where子句的结果是IQeuryable,所以它不能将IQueryable转换为DbSet,这就是为什么你会得到异常。

变化这样说:

public ActionResult Index(DateTime? From, DateTime? To) 
{ 
    List<StockPurchase> purchases = new List<StockPurchase>(); 
    if (From != null && To != null) 
    { 
     purchases = db.StockPurchases.Where(x => x.Date >= From && x.Date <= To).ToList(); 
    } 
    else 
    { 
     purchases = db.StockPurchases.ToList(); 

    } 
    Return View(purchases.ToList()); 
} 
1

您购买的是DBSet型的,以后你试图给它分配您的查询一个IQueryable<T>看来,你想要的。返回一个过滤的列表,如果你的参数有一个值,否则你想返回完整的列表。你可以这样做:

// GET: /Popular/ 
public ActionResult Index(DateTime? From, DateTime? To) 
{ 
    if (From != null && To != null) 
    { 
     return View(db.StockPurchases.Where(x => x.Date >= From && x.Date <= To).ToList()); 
    } 
    else 
    { 
     return return View(db.StockPurchases.ToList()); 
    } 
}