【问题标题】:LINQ Dynamically Select Column From Column NameLINQ 从列名中动态选择列
【发布时间】:2019-01-11 02:53:14
【问题描述】:

我做这个查询是为了从表中获取数据

List<MyTable> liDeatil = Db.Database.SqlQuery<MyTable>("SELECT * FROM [myDB].[dbo].[MyTable]").ToList();

来自liDetail 我想动态选择列,例如

 liDeatil.Select(s => new myclass{ Id = s.Id ,Marks = ....}).Tolist();

MyClass 在哪里

 public class MyClass
 {
     public Nullable<decimal> Id { get; set; }
     public string Marks { get; set; }
     public string rank { get; set; }
 }

有什么方法可以获取该列 请帮助我
我试图通过反思来做到这一点,但它不起作用

var ss = liDeatil.Select(s => new MyClass{ Id = s.Id ,Marks = s.GetType().GetProperties("ColumnMarks")}).Tolist();

已编辑

     public class MyTable
     {
         public Nullable<decimal> Id { get; set; }
         public string ColumnMarks{ get; set; }
         public string ColumnMarks1{ get; set; }
         public string ColumnMarks2{ get; set; }
     }

【问题讨论】:

  • “从 liDetail 我想动态选择列”是什么意思?
  • 在 Select 语句中我想从 liDetail 中选择 ColumnMarks

标签: c# linq visual-studio-2012 dynamic-linq


【解决方案1】:

根据您尝试通过反射实现的目标,以下代码应该可以工作:

var ss = liDeatil.Select(s => new MyClass{ Id = s.Id ,
Marks = (string)s.GetType().GetProperty("ColumnMarks").GetValue(s,null)}).Tolist();

【讨论】:

  • 我已经编辑了我的代码,请尝试使用“GetProperty("ColumnMarks")”而不是“GetProperties("ColumnMarks")”
【解决方案2】:

什么不完全有效?你有例外吗?我很困惑你从哪里得到“ColumnMarks”。您没有发布 MyTable 的定义,所以它可能来自那里。

liDeatil.Select(s => new myclass{ Id = s.Id, Marks = (string)s.GetType().GetProperty("ColumnMarks").GetValue(s, null)}).Tolist();

【讨论】:

  • 我已经编辑了我的问题
  • 这个答案或维克多的下面应该可以工作。通过反射获得属性后,您需要调用 GetValue。
猜你喜欢
  • 2015-09-26
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多