7

私はこのような既存の機能を持っています

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

テーブルには整数値を格納するための 4 つの列があり、上記の関数を使用して個別に読み取っています。

今、私はそれを Entity Framework に変換しています。

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

しかし、上記の関数はエラーを返します

入力文字列が正しい形式ではありません

列名自体を返すためです。

私はEFに非常に慣れていないため、これを解決する方法がわかりません。

どんな助けでもいただければ幸いです

ありがとうございました

4

6 に答える 6

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;
}

このメソッドは、動的入力メソッド parameter に対して機能するようになりましsColた。

于 2014-01-13T06:52:10.963 に答える
-3

次のようなリフレクションを使用できます(テストされていないコード):

public string sFunc(string sCol , int iId)
{
  var row = TableRepository.Entities.Where(x => x.ID == iId);
  var type = typeof(row);
  var propInfo = type.GetProperty(sCol);

  if (propInfo != null)
  {
    string value = (string)propInfo.GetValue(row);

    return value;
  }

  return null;
}
于 2014-01-13T06:28:09.150 に答える