0

当我偶然发现这段代码时,我正在关注本教程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);

这段代码在做什么?我不知道运算符 => 做了什么。另外我猜 .Single 是数据库的一些功能?
2) 这个函数正在调用它自己?我不明白它是如何以这种方式将专辑添加到购物车的。这不会导致函数进入无限循环吗?

4

2 回答 2

2

似乎有很多您还不太熟悉的核心 C#。

=>运算符是 lambda 运算符,它是编写内联函数的简洁方式。

Single函数是一个扩展方法,在这种情况下是调用数据库。此方法利用称为表达式树的简洁功能将强类型 C# 比较转换为相应的 SQL 代码。它是如何工作的是一个相当高级的话题,所以现在只考虑它是“魔法”。

对象的方法与代码当前所在的控制器操作方法不同。AddToCart我没有链接,因为这是相当基本的面向对象编程。cartAddToCart

我会假设这cart.AddToCart实际上会更新数据库。

还请阅读 LINQ 以获得更好的理解。这很可能是使用实体框架的 Linq To Sql 或 LINQ to Entities。

于 2012-04-13T18:18:51.873 回答
0

正在向 Action 传递专辑的 ID,然后可以通过调用从数据库中检索该 ID storeDB.Albums.Single()。(lambda 表示“在数据库中找到 AlbumId 列中的值与传递给控制器​​的 ID 匹配的条目。”)可以将.Single其视为 LINQ 传真:

SELECT TOP(1) *
FROM   Albums
WHERE  Albums.AlbumId = <id>

然后它会抓取用户的购物车并将获取的相册对象添加到购物车中。

然后,您将被重定向到可以列出购物车中所有条目的索引。

于 2012-04-13T18:08:51.033 回答