【问题标题】:Convert all fields to uppercase with Linq使用 Linq 将所有字段转换为大写
【发布时间】:2021-03-28 23:24:02
【问题描述】:

我正在使用 linq 来查询数据。 但我希望它返回大写字段。 下面是我的代码,如何将所有字段转换为大写?

public List<dynamic> QueryToList(string connStr, string sql)
{
 using (OracleConnection conn = new OracleConnection(connStr))
 {
    conn.Open();
    var results= conn.Query(sql).ToList();
    conn.Close();
    return results; //For now, it would return all fields into lower case.
 }
}

编辑: 感谢@Alen.Toma,我使用下面的代码并返回我想要的结果。

public List <dynamic> QueryToList(string connStr, string sql) 
{
conn.Open();
var results = conn.Query(sql);
conn.Close();

var valueResult = new List<dynamic>();
foreach (dynamic item in results)
{
    var dicItem = item as IDictionary<string, object>;
    var x = new ExpandoObject();
    foreach (var i in dicItem.Keys)
    {
        ((ICollection<KeyValuePair<string, object>>)x).Add(new KeyValuePair<string, object>(i.ToUpper(), dicItem[i]));
    }
    valueResult.Add(x);
}
return valueResult; 
}

【问题讨论】:

  • 为什么要这样做?您发布的内容不会返回小写,它会返回原始数据。但是,转换为大写会浪费内存而没有任何好处。 SQL 比较通常不区分大小写(取决于列排序规则)。您可以在代码中执行不区分大小写的比较。如果你想以大写显示一些数据,最好的地方是显示表单本身,例如作为文本框或网格上的格式字符串
  • 在任何情况下,您都没有使用 LINQ,而是使用了 Dapper。将字符串转换为大写的最简单方法是 SQL 查询。
  • 由于我使用的是postgreSQL,所以该字段将返回小写,但我希望其字段返回大写而不更改SQL。感谢您的设备!
  • 不,它不会 - 没有数据库会自行修改数据。您还没有解释为什么要返回大写字母。如果您返回大写字母,您认为会解决什么真正的问题?很可能不需要这种转换
  • 除非您的意思是要更改字段名称?只需在查询中使用列别名。 SELECT myfield as MyField, ....

标签: c# sql oracle linq


【解决方案1】:

我同意@Panagiotis Kanavos,更好的是将数据转换为类对象。

如果你仍然想这样做

这是一个例子。

public List <dynamic> QueryToList(string connStr, string sql) {
  var valueResult = new List <dynamic> ();
  using(OracleConnection conn = new OracleConnection(connStr)) {
    conn.Open();
    var results = conn.Query(sql).ToList();
    conn.Close();
    foreach(var item in results) {
      var dicItem = item as Dictionary <string,object> ;
      var x = new ExpandoObject();
      forEach(var i in dicItem.Keys)
        ((ICollection<KeyValuePair <string, object>>)x).Add(i.ToUpper(), dicItem[i]);
      valueResult.Add(x);
    }

    return valueResult;
  }
}

【讨论】:

  • 我稍微编辑了一下,现在可以使用了,谢谢!
  • Np,我是在没有测试的情况下即时编写的,所以如果没有一点小错误,它就不可能工作:) 无论如何,既然所有这些对你有用,你可以把它标记为已回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多