首页 > 解决方案 > 使用实体框架通过文本框输入进行查询

问题描述

我正在尝试使用 Entity Framework 查询我的数据库,但收到以下错误:

System.NotSupportedException:'LINQ to Entities 无法识别方法'Int32 ToInt32(System.String)'方法,并且此方法无法转换为存储表达式。

这是相关的代码部分:

string gendercode = txtGenderNo.Text;

using (var dbcontext = new Entities())
{
    var GenderName = dbcontext
                     .Genders
                     .Where(u => u.Code == Convert.ToInt32(gendercode))
                     .Select(u => u.GenderType)
                     .SingleOrDefault();
    txtGenderName.Text = GenderName;
}

public int Code { get; set; }
public string GenderType { get; set; }

public virtual DbSet<Employee> Employees { get; set; }
public virtual DbSet<Gender> Genders { get; set; }
public virtual DbSet<sysdiagram> sysdiagrams { get; set; }

标签: c#entity-framework

解决方案


Entity Framework 尝试将您的 C# 代码转换为 SQL。并非所有内容都是可翻译的 - 实体框架驱动程序仅支持某个子集。在您的情况下,解决方案很简单:在 LINQ 查询之前转换genderCodeint在查询中使用该值:

var genderCodeAsInt = Convert.ToInt32(gendercode);
using (var dbcontext = new Entities())
{
    var GenderName = dbcontext
                     .Genders
                     .Where(u => u.Code == genderCodeAsInt)
                     .Select(u => u.GenderType)
                     .SingleOrDefault();
            txtGenderName.Text = GenderName;
}

推荐阅读