在MVC 4应用程序中,使用什么样的语法/技术来计数购物车中的商品
本文关键字:技术 购物车 语法 MVC 应用程序 什么样 | 更新日期: 2023-09-27 18:11:02
我有一个类Cart
:
using System.ComponentModel.DataAnnotations;
namespace MvcMusicStore.Models
{
public class Cart
{
[Key]
public int RecordId { get; set; }
public string CartId { get; set; }
public int AlbumId { get; set; }
public int Count { get; set; }
public System.DateTime DateCreated { get; set; }
public virtual Album Album { get; set; }
}
}
,并且有一个类ShoppingCart
,业务逻辑在其中编码。里面有我完全不懂的GetCount()
方法。
public int GetCount()
{
// Get the count of each item in the cart and sum them up
int? count = (from cartItems in storeDB.Carts
where cartItems.CartId == ShoppingCartId
select (int?)cartItems.Count).Sum();
// Return 0 if all entries are null
return count ?? 0;
}
- 什么是
int?
? - 是LINQ查询,SQL查询还是什么类型的查询,因为它看起来像SQL,但它使用的东西看起来像casting
编辑:第二个问题是指:(from cartItems in storeDB.Carts
where cartItems.CartId == ShoppingCartId
select (int?)cartItems.Count).Sum();
而不是int?
它来自本教程:http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-8
int?是一个可空类型。在没有找到任何匹配where语句的情况下,函数会利用它。他什么时候回来数数??0,他合并计数,声明如果它为空,则返回0。
-
int?
是Nullable<int>
的缩写,是一种使不可空的原语类型int
可空的方法。Nullable<T>
是struct
(它本身也不能是null
,因为它是struct
)。为了使其工作,代码在编译时被转换为Nullable<T>
上的其他调用。 -
这是一个LINQ语句,'by design'看起来很像SQL。
public int GetCount()
{
// Get the count of each item in the cart and sum them up
int? count = (from cartItems in storeDB.Carts
where cartItems.CartId == ShoppingCartId
select (int?)cartItems.Count).Sum();
// Return 0 if all entries are null
return count ?? 0;
}
int?
是Nullable<int>
的简写。这意味着结果可以是整数,也可以是null
。
该查询为linq查询。它正在使用LINQ到实体提供程序,将查询转换为SQL,并将结果返回到int? count
底线return count ?? 0;
就是
if (count == null)
{
return 0;
}
else
{
return count;
}
内部查询为LINQ "query"语法。括号没有强制转换任何东西…它们表示将返回结果集的内部查询,然后由Sum()
方法(LINQ "method";语法).
如果更清楚的话,你可以把它分开:
var results = from cartItems in storeDB.Carts
where cartItems.CartId == ShoppingCartId
select (int?)cartItems.Count;
var sum = results.Sum();
或all in方法语法:
var results = storeDB.Carts
.Where(c => c.CartId == ShoppingCartId)
.Select(c => (int?)c.Count)
.Sum();
我不相信有任何理由检查Sum()
是否返回空值(使用??
),因为Sum()
方法对于可空整型忽略空值。
如果源文件不包含任何元素,该方法返回0。
结果不包含null值。
可能在解决可空的int问题上没有多大意义,因为其他答案/评论已经有了,但是这里有一个像样的页面显示了它的使用。