以其他数据类型显示数据库中的数据
本文关键字:数据 数据库 显示 其他 数据类型 | 更新日期: 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查询中。
正如我在这里看到的,有两个选项
-
(这就是您正在尝试的)使用c#代码进行搜索,并让entityframework将其转换为sql并为您带来结果
这个问题是您的整数字段以字符串形式存储在数据库中。如果数据库中存储的是真正的整数,我建议将Q_num字段的类型更改为integer。否则,在内存中的代码中转换它将是有问题的,因为排序和搜索是数据库的问题。
-
为您的搜索编写一个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;
}