所以我遇到了一个问题,我需要在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)'方法,这个方法不能 翻译成商店表达
答案 0 :(得分:0)
您可以尝试:var sorted = questions.OrderBy(q => int.Parse(q.Q_num));
答案 1 :(得分:0)
首先,您正试图从sql db中搜索一下。
您正在编写一些c#代码,并通过entityframework转换为sql查询。
如果在c#代码中编写Convert.Toint32(someField),它将不会包含在您的SQL查询中。
正如我在这里看到的,有2个选项
(这是你正在尝试的)用c#代码进行搜索,让entityframework将其转换为sql并为你带来结果
这个问题是你的整数字段在数据库中存储为字符串。 我建议将Q_num字段的类型更改为数据库中的整数,如果它存储真正的整数。否则,将其转换为内存中的代码会有问题,因为排序和搜索需要数据库。
为您的搜索编写一个sql查询,根据您的switch case语句将您的排序选项放在sql查询中,并在sql查询中转换数值如here
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;
}
答案 2 :(得分:0)
尽管每个人都真的试图为我回答这个问题,但我非常感谢所有好的反馈,我决定使用一些零占位符来容纳搜索。我不会说这是正确的,但它是一种解决方法,也是工作人员的建议。否则将数据类型更改为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;
}