当我偶然发现这段代码时,我正在学习这个教程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.AlbumId == id);
这段代码在做什么?我不知道=>接线员是做什么的。另外,我想.Single是数据库的一些函数吗?
2)这个函数正在调用它自己?我看不出它是如何以这种方式把专辑添加到购物车里的。这不会导致一个函数进入一个无限循环吗?
发布于 2012-04-13 18:18:51
似乎有很多核心C#你还不太熟悉。
=>操作符是lambda操作符,它是编写内联函数的简洁方式。
Single函数是一个可拓法,在本例中是对数据库的调用。此方法利用称为表达树的整洁特性将强类型的C#比较转换为相应的C#代码。它的工作原理是一个相当高级的话题,所以现在只考虑它的“魔法”。
AddToCart对象的cart方法与代码当前所在的AddToCart控制器操作方法不同。我没有这方面的链接,因为这是相当基本的面向对象编程。
我假设cart.AddToCart实际上会更新数据库。
还阅读LINQ,以更好地理解。这很可能是Linq到Sql或LINQ实体使用实体框架。
发布于 2012-04-13 18:08:51
此操作将传递一个相册的ID,然后可以通过storeDB.Albums.Single()调用从数据库中检索该ID。( lambda的意思是“查找数据库中的条目,其中AlbumId列中的值与传递给控制器的ID匹配”)。把.Single看作是以下的LINQ传真:
SELECT TOP(1) *
FROM Albums
WHERE Albums.AlbumId = <id>然后,它抓取用户的购物车,并将获取的相册对象添加到购物车中。
然后重定向到索引,它可以列出购物车中的所有条目。
https://stackoverflow.com/questions/10145924
复制相似问题