以下代码适用于已登录用户的信用卡表中已有记录的情况;但是,当用户在信用卡表中没有条目时,查询会按预期找到零记录。问题是,语句maxccid = query.Maxccid();返回Null并抛出InvalidOpeation异常。我不能使数据库中的ccid字段为空,因为它是主键的一部分。我需要一种方法来检测这个查询是否会在我运行它之前返回null,或者是一种捕获它的方法(最好没有try catch,因为这种情况会发生在每个新客户身上(Try / Catch的最佳实践状态这是没有正确使用Try / Catch。。只需添加一条注释即可使用Entity Framework。
更新4/9/14:我修改了查询以解决我在评论中向Usesr FailedProgramming和Mike报告的问题。我仍然有空问题。
// Create CreditCard - Write to DB
public ActionResult Create(CreditCard model)
{
EntitiesContext context = new EntitiesContext();
int uid = (int)WebSecurity.GetUserId(User.Identity.Name); // Currently logged-in user
short? maxccid = 0; //this will be the max ccid for this user
var query = from c in context.CreditCards
where c != null && c.UserId == uid select c.CCID;
maxccid = query.Max();
答案 0 :(得分:1)
if(query.Any())
maxccid = query.Max();
答案 1 :(得分:0)
首先使用using
作为数据库对象
其次,使用null-coalescing运算符。处理空值
在这里查看http://msdn.microsoft.com/en-us/library/ms173224.aspx
public ActionResult Create(CreditCard model)
{
using(EntitiesContext context = new EntitiesContext()) // using keyword will dispose the object properly.
{
int uid = (int)WebSecurity.GetUserId(User.Identity.Name); // Currently logged-in user
short? maxccid = 0; //this will be the max ccid for this user
var query = from c in context.CreditCards
where c.UserId == uid && c.CCID == (context.CreditCards.Max(c1 => c1.CCID) ) select c.CCID ;
maxccid = query.Max() ?? 0; //use null-coalescing operator.
}
}
您可以根据需要更多地优化此代码。 希望,它可能在某些方面帮助你。祝你有愉快的一天。