繁体   English   中英

C#实体框架-如何获取指定为参数的列

[英]C# Entity Framework - How can I get a column which is specified as a paremeter

我正在使用C#使用MySQL的ADO.NET实体框架编写方法。 我正在创建一个函数,当调用该函数时,我指定要选择的列,如下所示:

public string GetColumn(string whereValue, string column)
{
  xxxEntities data = new xxxEntities();
  lock (lockObject)
  {
    var result = data.employees.SqlQuery("SELECT `" + column + "` FROM `employees` WHERE `Code` = '" + code + "'");
    return result.ToListAsync().Result[0].????; // I want to get the column in the parameters
  }
}

谢谢,任何帮助将不胜感激。

让我们暂时假设您的目标列是一个字符串。 那么您的语法将是这样的:

// I've parameterized the parameterizable part of your query
var result = data
   .employees
   .SqlQuery<string>("SELECT `" + column + "` FROM `employees` WHERE `Code` = @p0", code); 
return result.ToListAsync().Result[0]; // Result[0] is a string

如果目标列是整数,则第一行将是:

var result = data
    .employees
    .SqlQuery<int>("SELECT `" + column + "` FROM `employees` WHERE `Code` = @p0", code); 

该程序不知道需要哪种类型的result ,因此您需要通过向SqlQuery方法提供类型参数来告诉它。

如果column可以具有不同的类型,则您会遇到一些问题,因为C#无法知道属性类型是什么。 您可能必须使用一些特殊的逻辑。

顺便说一句,不涉及构建自定义SQL的另一种方法是使用employee对象进行查询,但是使用Reflection来访问所需的属性:

// Warning:  this is being done from memory. 
var result = data.employees
     .Where(e => Code == code);
// Assuming the property is a string:
return result
     .Select(e => (string) typeof(employee).GetProperty(column).GetValue(e))
     .ToListAsync();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM