【问题标题】:what does a linq query return when no results are found找不到结果时,linq 查询返回什么
【发布时间】:2012-07-20 13:45:27
【问题描述】:

我正在使用查询来查看数据库中是否已经存在用户。如果它找到一个用户,它会将其添加到列表(而不是数据库)中,并显示一条消息。如果用户不存在,程序继续添加用户。

将查询结果添加到列表时存在问题,结果什么也没找到。如果查询一无所获(用户还不存在),则返回的值不是 null 或 0,所以我不确定如何检查。

我的代码运行良好,但我的问题是试图找到一种更优雅的方法。我尝试将查询结果添加到列表中。如果它是“捕获”,则表示用户不存在,应添加。现在我的代码是:

     var userIsNew =
                        from f in controlEntities.Users
                        where (f.UserId == userIdTextBox.Text)
                        select f;

                    List<Users> temp = new List<Users>(); 

                    try
                    {
                        temp = userIsNew.ToList<Users>();
                    }
                    catch
                    {
                        //do nothing
                    }


                    if (temp.Count > 0)
                    {
                        MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId.");
                    }

感谢您的帮助!

【问题讨论】:

  • Logic by exception几乎总是错误。
  • 对不返回匹配项的结果调用.ToList&lt;User&gt; 应该可以正常工作。它只是一个包含 0 个条目的列表。
  • 这是我第一次尝试的。但是当我尝试将不匹配的结果添加到任何类型的列表时,它会引发异常。所以我的解决方法是使用这个抛出的异常来执行我的其余代码。
  • 调用temp = userIsNew.ToList&lt;Users&gt;()时,结果为空时抛出什么异常?
  • 异常只说“处理此请求时发生错误”

标签: linq null


【解决方案1】:
        var userIsNew = (from f in controlEntities.Users
                                where (f.UserId == userIdTextBox.Text)
                                select f).FirstOrDefault();


        if (userIsNew != null)
        {
            MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId.");
        }

【讨论】:

  • null 和 empty 是两个不同的东西,所以我不相信这是一个正确的答案。我看到一个查询返回一个非空对象,即使对象中的查询结果表明没有找到任何内容。
  • FirstOrDefault 如果始终没有找到结果,应该返回 null 吗?你能详细说明它没有 0 个结果吗
【解决方案2】:

另一种方法是:

        bool userIsNew = controlEntities.Users.
            Count(f => f.UserId == userIdTextBox.Text) == 0;

        if (!userIsNew)
        {
            MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId.");
        }

效率很高,因为数据服务器只返回一个数字而不是结果集。

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多