以另一种数据类型显示数据库中的数据

时间:2015-12-15 15:49:51

标签: c# .net

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

3 个答案:

答案 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个选项

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

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

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

  3. 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;

        }