【问题标题】:Displaying data from a database in another data type以另一种数据类型显示数据库中的数据
【发布时间】:2015-12-16 03:40:32
【问题描述】:

所以我遇到了一个问题,我需要获取一个 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)' 方法,而这个方法不能 翻译成商店表达式

【问题讨论】:

  • 不是很清楚,你真正想要达到的目标
  • 您应该发布错误以及它在代码中的位置。但是您的 linq 查询问题中的问题是可能有多个结果,因此您不能为 number 设置 int 值。
  • 请问您遇到了什么错误?
  • EntityFramework.SqlServer.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理附加信息:LINQ to Entities 无法识别方法“Int32 ToInt32(System.String) ' 方法,并且该方法不能翻译成商店表达式。
  • 这段代码在什么上下文中使用?

标签: c# .net


【解决方案1】:

你可以试试这个:var sorted = questions.OrderBy(q => int.Parse(q.Q_num));

【讨论】:

  • 我收到以下错误。我会使用 int 作为数据类型,但有人已经有一个 Visual fox pro 应用程序,需要这些值在 String 或 Char {LINQ to Entities 无法识别方法 Int Parse(System.String)' 方法中,并且此方法不能被翻译成商店表达式}
【解决方案2】:

首先在这里你试图从 sql db 中进行搜索。

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

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

我在这里看到有 2 个选项

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

    问题在于您的整数字段在数据库中存储为字符串。 我建议在数据库中将 Q_num 字段的类型更改为整数,如果它存储的是整数。否则将其转换为内存中的代码会出现问题,因为排序和搜索是数据库关注的问题。

  2. 为您的搜索编写一个 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;
}

【讨论】:

  • 那么,如果我收到关于缺少演员表的错误,演员表会是什么?并感谢您的帮助
【解决方案3】:

尽管每个人都真的想为我回答这个问题,而且我非常感谢所有好的反馈,但我还是决定使用一些零占位符来适应搜索。我不会说这是正确的,但它是一种解决方法,也是工作人员建议的。否则将数据类型更改为 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;

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多