Linq非静态方法需要目标

时间:2014-10-09 02:32:27

标签: c# asp.net asp.net-mvc linq

不确定原因,但这一行导致了我的问题:

public void AddToCart(Product product)
{
    var cartItem = storeDB.Carts.SingleOrDefault((c.productID) == product.ProductID);
}

我是从控制器调用它。

public ActionResult AddToCart(int productID)
{
    var addedProduct = storeDB.Products.Find(productID);

    var cart = ShoppingCart.GetCart(this.HttpContent);

    cart.AddToCart(addedProduct);

    return RedirectToAction("Index");
}

1 个答案:

答案 0 :(得分:0)

我猜你的第一个查询storeDB.Products正在返回一个空值(因为你找不到找到的实体)。随后,addedProduct为null,并尝试在另一个LINQ语句中引用它,该语句将引发空引用异常。

显然,在您的storeDB上下文中使用的LINQ语句内的表达式中抛出的空引用异常表现为您获得的“方法需要目标”异常。

尝试检查null,然后再将其传递给AddToCart方法并在该LINQ语句中使用它。

public ActionResult AddToCart(int productID)
{
    var addedProduct = storeDB.Products.Find(productID);

    if (addedProduct == null)
    {
        // take some appropriate action here
        // or possibly throw an exception (can't add a missing product to the cart)
    }

    var cart = ShoppingCart.GetCart(this.HttpContent);

    cart.AddToCart(addedProduct);

    return RedirectToAction("Index");
}

此外,您的代码将在首次编辑后无法编译。您需要重新添加c =>

var cartItem = storeDB.Carts.SingleOrDefault(c => c.productID == product.ProductID);