当前位置: 首页 > 面试题库 >

使用实体框架在运行时动态选择列

孙翰墨
2023-03-14
问题内容

我有这样的现有功能

public int sFunc(string sCol , int iId)
{
    string sSqlQuery = "  select  " + sCol + " from TableName where ID = " +  iId ;
    // Executes query and returns value in column sCol
}

该表有四列来存储整数值,我正在使用上述功能分别读取它们。

现在,我将其转换为Entity Framework。

public int sFunc(string sCol , int iId)
{
     return Convert.ToInt32(TableRepository.Entities.Where(x => x.ID == iId).Select(x => sCol ).FirstOrDefault());
}

但是上面的函数返回一个错误

输入的字符串格式不正确

因为它返回列名本身。

我不知道如何解决这个问题,因为我是EF的新手。

任何帮助,将不胜感激

谢谢


问题答案:

这可能有助于解决您的问题:

public int sFunc(string sCol, int iId)
{
    var _tableRepository = TableRepository.Entities.Where(x => x.ID == iId).Select(e => e).FirstOrDefault();
    if (_tableRepository == null) return 0;

    var _value = _tableRepository.GetType().GetProperties().Where(a => a.Name == sCol).Select(p => p.GetValue(_tableRepository, null)).FirstOrDefault();

    return _value != null ? Convert.ToInt32(_value.ToString()) : 0;
}

现在,该方法适用于动态输入方法参数sCol



 类似资料:
  • 问题内容: 我在框架中添加了自定义字体。我遵循了所有步骤,但是没有用。 我可以在Interface Builder中设置字体,但是在构建项目时,它不会在模拟器/设备上显示该字体。 问题答案: 我来晚了一点,但是我采用了PetahChristian的解决方案,并以扩展的形式创建了Swift版本。这对我有用。我发现,当您尝试使用常规名称来使用字体名称和大小来获取字体时,它总是在字体文件的主捆绑包中查找

  • Dave使用Flyway为Alice和Bob初始化模式,因此他们都有foo table和bar函数。Dave使用jOOQ生成java api,并在运行时将开发模式映射到用户模式。戴夫以前和他的任何一个客户都没有关系,突然发现自己是鲍勃的侄子。 但是爱丽丝和鲍勃后来都回来找戴夫,让他为他们写一些自动化。因此,Dave决定创建一个机器用户Rob,他可以访问Alice和Bob的模式。他可以重用所有相同的

  • 我正在使用Java来创建硒测试用例。我的系统基于彼此连接的 Portlet。我正在使用“选择框架”命令来选择门户let。 我尝试了很多东西,但似乎它不是这样工作的: 任何人都可以帮我吗?

  • 问题内容: 我正在使用带有注释的Spring Bean,并且需要在运行时选择其他实现。 例如,我需要Windows平台,我需要Linux平台。 目前,我只知道一种可怕的解决方案: 请考虑我仅使用注释,而不使用XML配置。 问题答案: 您可以将bean注入移动到配置中,如下所示: 或者,您可以使用配置文件和,然后用注释(如或)注释您的服务实现,并为您的应用程序提供此配置文件之一。

  • 我看到过各种帖子描述JPA EntityGraph允许在运行时选择图表。我不完全清楚这指的是什么。 出于诚意和尊重,我想参考这篇有用的文章:https://www.baeldung.com/jpa-entity-graph.(大多数JPA用户可能已经看过了。) 文章引用- EntityGgraph允许对我们想要检索的相关持久性字段进行分组,并允许我们在运行时选择图形类型。 并在结论部分再次巩固上述

  • 因此,我使用实体框架的“代码优先”方法,并且我有映射文件来映射表信息并添加诸如验证之类的内容,例如: 这是在使用Fluent API,我想知道如何通过字符串而不是T.AccountName获得属性名。我想动态设置这些属性,但我不知道如何通过编程实现。