回答

收藏

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

技术问答 技术问答 111 人阅读 | 0 人回复 | 2023-09-13

我有这样的现有功能
2 \! {# ?4 V9 {" |public int sFunc(string sCol , int iId)
- t- t: C) T8 ?# O0 g" w0 {{
+ f; q  x6 t2 ]/ a. e( Y: ~$ {- I. V" n8 X    string sSqlQuery = "  select  " + sCol + " from TableName where ID = " +  iId ;
! B  m: X- @5 A. N# i  E    // Executes query and returns value in column sCol9 N% r3 x% s7 E0 P: X: g$ ^
}/ n' V: [# A' k' U" [1 C
该表有四列来存储整数值,我正在使用上述功能分别读取它们。
; |/ b7 v+ ^) x) v- R1 b现在,我将其转换为Entity Framework。$ x, k  @! ?7 V
public int sFunc(string sCol , int iId)2 B+ ^9 o* R8 g% w( L+ F  w
{
  `7 R1 y2 \1 R1 e* F     return Convert.ToInt32(TableRepository.Entities.Where(x => x.ID == iId).Select(x => sCol ).FirstOrDefault());
( d4 b1 P! k8 O* R}5 J, {- I$ j: {, }3 g8 M9 Q/ P
但是上面的函数返回一个错误
; e( e9 M/ J8 q
8 Z) v* Z& Y: p输入的字符串格式不正确& g9 s8 T$ R7 ]- g

" \' _: [! s, v# e( m! _因为它返回列名本身。" ?8 a/ T( W  ?4 o  X* `9 V# [& U6 }, m
我不知道如何解决这个问题,因为我是EF的新手。
, k+ ^; B' Y' y任何帮助,将不胜感激) t5 {& F" c0 s/ e5 C
谢谢
% `6 o4 ~  D' m  P* c8 `                4 k; l/ Z& _: B& n! f
解决方案:+ f" C3 b: I9 Q# W- q
                ( a0 S' U, x! Q4 s/ q  p

% a8 d9 Z3 i& \! @( v
# Z6 B+ g4 f, U                这可能有助于解决您的问题:- |, K/ k/ A; q0 Z" c
public int sFunc(string sCol, int iId)0 p- k5 w3 m% J% d2 k
{
6 p  F; P) X3 g% _2 n) @    var _tableRepository = TableRepository.Entities.Where(x => x.ID == iId).Select(e => e).FirstOrDefault();
( f3 w& K  U  K- U    if (_tableRepository == null) return 0;
; S' u3 s& o0 l, H4 ]& U% i- J    var _value = _tableRepository.GetType().GetProperties().Where(a => a.Name == sCol).Select(p => p.GetValue(_tableRepository, null)).FirstOrDefault();
7 n) |, Z; O: W4 D- j! N    return _value != null ? Convert.ToInt32(_value.ToString()) : 0;. W' f9 M- m1 h
}7 S& y4 }6 ^8 U7 o
现在,该方法适用于动态输入方法参数sCol。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则