【问题标题】:How to get values from the specific column names如何从特定列名中获取值
【发布时间】:2016-06-18 01:20:55
【问题描述】:
string[] data = { "Col1", "Col2", "Col3" };

tblMain main = _serviceRepository.GetMainData(record.ExtractID);

foreach (string colName in data)
{

}

我有一个由表的列名组成的字符串。我正在使用实体框架从数据库中获取数据。数据将只有一行,我将其保存为 tblMain 类型。现在我想将数组与表中的列名进行比较。

如果表中存在该列名,那么我需要从表中获取数据。有没有办法做到这一点?

tblMain 是一种模型

public partial class tblMain
{
    public int ID { get; set; }
    public string Col1 { get; set; }
    public string Col2 { get; set; }
    public string Col3 { get; set; }
}

【问题讨论】:

  • 你的tblMain类有什么特点?如果它类似于DataTable 类,那么应该有一个列集合,以便您可以只比较名称或检查它是否作为名称存在。但我们无法提供进一步帮助,因为我们没有关于您的自定义类的信息。
  • 这里的 tblMain 只是一个模型。我们无法在此处获取列名。或者我想我不知道如何在这里得到它。我已经编辑了我的问题,请再看一遍。
  • 为什么首先使用字符串作为列名?你能不能只以类型安全的方式查询列并避免反射或其他方法?
  • 是的,从更广泛的意义上说更多关于您想要实现的目标。我觉得有一种更简单的方法可以到达那里。

标签: c# entity-framework


【解决方案1】:

您可以对 PropertyInfo 类使用反射来实现这一点。 如果要从列中获取数据,则必须将查询结果参数传递给方法 GetValue

这是一个如何获取 Col1 数据的示例:

tblMain queryResult = ctx.tblMain.first(); // get your fist row in the DbSet

PropertyInfo prop = tblMain.GetType().GetProperties(data[0]);
string col1Value = prop.GetValue(queryResult);

当然,您可以使用 PropertyExist() 方法添加验证

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多