Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MVC中检测或处理空查询结果?_C#_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# 如何在MVC中检测或处理空查询结果?

C# 如何在MVC中检测或处理空查询结果?,c#,entity-framework,asp.net-mvc-4,C#,Entity Framework,Asp.net Mvc 4,以下代码适用于已登录用户的信用卡表中已有记录的情况;但是,当用户在信用卡表中没有条目时,查询将按预期查找零条记录。问题是,语句maxccid=query.maxccid();返回Null,并引发InvalidRepeation异常。我不能使数据库中的ccid字段为空,因为它是主键的一部分。我需要一种方法来检测这个查询在我运行它之前是否会返回null,或者一种方法来捕获它(最好不要使用try-catch,因为这种情况会发生在每个新客户身上(try/catch状态的最佳实践这不是try/catch的

以下代码适用于已登录用户的信用卡表中已有记录的情况;但是,当用户在信用卡表中没有条目时,查询将按预期查找零条记录。问题是,语句maxccid=query.maxccid();返回Null,并引发InvalidRepeation异常。我不能使数据库中的ccid字段为空,因为它是主键的一部分。我需要一种方法来检测这个查询在我运行它之前是否会返回null,或者一种方法来捕获它(最好不要使用try-catch,因为这种情况会发生在每个新客户身上(try/catch状态的最佳实践这不是try/catch的正确用法)。只需补充一点,我正在使用实体框架

更新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();

首先,对数据库对象使用
使用

其次,使用空合并运算符。要处理空
请检查此处

您可以根据需要进一步优化此代码。
希望,它可能会在某些方面对您有所帮助。祝您愉快。

如果(query.Any())maxccid=query.Max();Pratik怎么样,谢谢您对此进行尝试。当我输入using(EntitiesConext….语句时,它会导致context.CreditCards语句不喜欢context(在引用的地方用红色下划线)。问题是,您只能在特定的using block中使用该上下文对象。您不能在范围外使用它。请做一件事,如果无法获得它,请不要使用该上下文对象。只需使用null colaescing运算符,它将帮助您实践,您不能在short或int类型的对象上使用null Coalescing运算符。代码按原样工作,但w我发现查询没有产生一致的结果。当CreditCards表中只有一两条记录时,query.Max()返回一个假值。当有三条或更多的query.Max()时返回一个真实值。这非常令人沮丧。我想知道这是否与EntityFramwork有关,因为我是在查询上下文,而不是直接查询数据库?谢谢Michael。这对我来说不起作用。这很奇怪,但如果creditCard表中有三条或更多记录,它会按我的预期执行(query.Any())是true,否则如果有一个或两个记录,它就等于false,这不是我想要的。我想query。如果查询返回一个或多个记录,Any()应该返回true?我仍在处理它,但我认为这是可行的Michael。我以前认为不是,但我在查询中发现了一个错误。
if(query.Any())
     maxccid = query.Max();
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.
    }


}