一尘不染

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

sql

我有这样的现有功能

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的新手。

任何帮助,将不胜感激

谢谢


阅读 123

收藏
2021-05-05

共1个答案

一尘不染

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

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

2021-05-05