我正在关注本教程http://www.asp.net/mvc/tutorials/mvc-music-store 当我偶然发现这段代码时。
public ActionResult AddToCart(int id)
{
// Retrieve the album from the database
var addedAlbum = storeDB.Albums
.Single(album => album.AlbumId == id);
// Add it to the shopping cart
var cart = ShoppingCart.GetCart(this.HttpContext);
cart.AddToCart(addedAlbum);
// Go back to the main store page for more shopping
return RedirectToAction("Index");
}
我不明白两件事:
的 1)
var addedAlbum = storeDB.Albums
.Single(album => album.AlbumId == id);
这段代码在做什么?我不知道operator =>确实。我猜也是.Single是数据库的一些功能?
的 2)
这个功能正在调用自己?我不知道它是如何以这种方式将相册添加到购物车的。这不会导致函数进入无限循环吗?
答案 0 :(得分:2)
似乎还有很多你不太熟悉的核心C#。
=>
运算符是lambda运算符,它是编写内联函数的简洁方法。
Single
函数是extension method,在这种情况下是对数据库的调用。此方法使用称为expression trees的简洁功能将强类型C#比较转换为相应的SQL代码。它是如何工作的是一个非常高级的主题,所以现在只需将其视为“神奇”。
AddToCart
对象的cart
方法与代码当前所在的AddToCart
控制器操作方法不同。我没有相关的链接,因为这是相当基本的面向对象编程。
我认为cart.AddToCart
实际上会更新数据库。
另请阅读LINQ以便更好地理解。这很可能是使用实体框架的Linq To Sql或LINQ to Entities。
答案 1 :(得分:0)
正在传递一个专辑的ID,然后可以通过storeDB.Albums.Single()
调用从数据库中检索该专辑的ID。 (lambda说“在数据库中查找AlbumId列中的值与传递给控制器的ID匹配的条目。”)将.Single
视为LINQ传真:
SELECT TOP(1) *
FROM Albums
WHERE Albums.AlbumId = <id>
然后抓住用户的购物车并将获取的相册对象添加到购物车。
然后,您将被重定向到索引,在该索引中可以列出购物车中的所有条目。