以其他数据类型显示数据库中的数据

本文关键字:数据 数据库 显示 其他 数据类型 | 更新日期: 2023-09-27 18:26:50

所以我遇到了一个问题,我需要获取Char中的一个问题字段,并使我的站点将数据读取为int值,以便对其进行正确排序!不知道该怎么做。我试着转换它,然后尝试使用那个变量,但我收到了关于错误重载的错误。

if (!String.IsNullOrEmpty(searchString))
            {
                questions = questions.Where(q => q.Q_num.Contains(searchString) || q.Q_name.Contains(searchString) || q.VFP_name.Contains(searchString));
            }
            int number = Convert.ToInt32(questions.Select(q => q.Q_num));
            switch (sortOrder)
            {
                case "name_desc":
                    questions = questions.OrderByDescending(q => q.Q_name);
                    break;
                case "name":
                    questions = questions.OrderBy(q => q.Q_name);
                    break;
                case "num_desc":
                    questions = questions.OrderByDescending(q => q.Q_num);
                    break;
                default:
                    questions = questions.OrderBy(q => q.Q_num);
                    break;
            }

我得到错误:

中发生类型为"System.NotSupportedException"的异常EntityFramework.SqlServer.dll,但未在用户代码中处理附加信息:LINQ to Entities无法识别该方法"Int32-ToInt32(System.String)"方法,而此方法不能为转换为存储表达式

以其他数据类型显示数据库中的数据

您可以尝试以下操作:var sorted = questions.OrderBy(q => int.Parse(q.Q_num));

首先,您要尝试从sqldb中进行正确的搜索。

您正在编写一些c#代码,它被entityframework转换为sql查询。

如果在c#代码中编写Convert.Toint32(someField),它将不会包含在sql查询中。

正如我在这里看到的,有两个选项

  1. (这就是您正在尝试的)使用c#代码进行搜索,并让entityframework将其转换为sql并为您带来结果

    这个问题是您的整数字段以字符串形式存储在数据库中。如果数据库中存储的是真正的整数,我建议将Q_num字段的类型更改为integer。否则,在内存中的代码中转换它将是有问题的,因为排序和搜索是数据库的问题。

  2. 为您的搜索编写一个sql查询,根据您的switch-case语句将排序选项放入sql查询中,并在sql查询中强制转换数值,如所示

var searchQuery = "SELECT * FROM dbo.QuestionsTable -- your where clause and sorting options"; //append order by part in your switch case questions.SqlQuery(searchQuery).ToList()

对于第一个选项,您可以尝试这个

if (!String.IsNullOrEmpty(searchString))
{
    questions = questions.Where(q => q.Q_num.Contains(searchString) || q.Q_name.Contains(searchString) || q.VFP_name.Contains(searchString)).ToList();
}
switch (sortOrder)
{
    case "name_desc":
        questions = questions.OrderByDescending(q => q.Q_name).ToList();
        break;
    case "name":
        questions = questions.OrderBy(q => q.Q_name).ToList();
        break;
    case "num_desc":
        questions = questions.OrderByDescending(q => int.Parse(q.Q_num)).ToList();
        break;
    default:
        questions = questions.OrderBy(q => int.Parse(q.Q_num)).ToList();
        break;
}

虽然每个人都试图为我回答这个问题,我也非常感谢所有的好反馈,但我决定使用一些零占位符来适应搜索。我不会说这是正确的,但这是一个变通办法,也是工作人员建议的。否则,将数据类型更改为double或int,然后在控制器中使用.tostring,以便仍然可以搜索它。

if (!String.IsNullOrEmpty(searchString))
        {
            questions = questions.Where(q => q.Q_num.ToString().Contains(searchString) || q.Q_name.Contains(searchString) || q.VFP_name.Contains(searchString));
        }
        switch (sortOrder)
        {
            case "name_desc":
                questions = questions.OrderByDescending(q => q.Q_name);
                break;
            case "name":
                questions = questions.OrderBy(q => q.Q_name);
                break;
            case "num_desc":
                questions = questions.OrderByDescending(q => q.Q_num);
                break;
            default:
                questions = questions.OrderBy(q => q.Q_num);
                break;
        }