如何从SQL查询C#中获取所有值

时间:2017-03-03 06:22:42

标签: c# sql-server asp.net-mvc entity-framework linq

我使用String Builder在C#中生成RAW SQL QUERY。

List<string> columns = new List<string>();
columns.Add("id");
columns.Add("Temp");

StringBuilder SqlStatement = new StringBuilder();
SqlStatement.Append("Select ");
for (int i = 0; i < columns.Count; i++)
{
   if (i == columns.Count - 1)
   {
      SqlStatement.Append(columns[i]);
   }
   else
   {
      SqlStatement.Append(columns[i]);
      SqlStatement.Append(",");
   }
}
SqlStatement.Append(" FROM graph_update");

var ctx = new graphDBContext();
var result = ctx.Database.SqlQuery<graphDBContext>(SqlStatement.ToString()).ToList();

这转换为SELECT id,Temp FROM graph_update

结果给了我

id = 1, temp = 20 

id = 2 temp = 30

如何获得所有这些值????

我太习惯了:

foreach(var item in result)
{
   item.id =  id;
   item.temp = temp;
}

但它不会让我。

编辑: 对不起,但我不确定你的意思。这是我的调试器

enter image description here

4 个答案:

答案 0 :(得分:2)

如果没有错误返回

,请尝试使用foreach
foreach(var v in result)
{
    String v0 = v[0].ToString();
    String v1 = v[1].ToString();
}

答案 1 :(得分:1)

我希望这会有所帮助。

foreach(var item in result)
{
   var id =  item.id;
   var temp = item.temp;
}

在上面的代码中,您尝试将值分配给项目,而不是检索。

答案 2 :(得分:1)

假设你有EF&gt; 6,然后是ctx.Database.SqlQuery,根据方法文档:

  

创建一个原始SQL查询,该查询将返回给定泛型类型的元素。     类型可以是具有与查询返回的列的名称匹配的属性的任何类型,也可以是简单的基本类型。该类型不必是实体类型。即使返回的对象类型是实体类型,上下文也不会跟踪此查询的结果。

考虑到这一点,你可以做这样的事情:

public class GraphUpdateResult 
{
  public int Id {get; set;}
  public decimal Temp {get; set;}
}

然后在你当前的方法中:

var result = ctx.Database.SqlQuery<GraphUpdateResult>SqlStatement.ToString()).ToList();
foreach (var graphResult in result)
{
   Console.WriteLine(graphResult.Id);
   Console.WriteLine(graphResult.Temp);
}

您可以向GraphUpdateResult类添加更多列以供EF绑定,即使在某些查询中您未在select语句中指定它们。

答案 3 :(得分:1)

您可以使用像

这样的ORM-Mapper

https://stormy.codeplex.com/SourceControl/latest#Stormy.cs

它是一个非常轻的Mapper,你可以看看它是如何工作的。

它将阅读器数据映射到对象数据:

public class CatMapper : ISelectable<Cat>
{
    public Cat ApplySelect(IDataReader reader)
    {
        return new Cat()
            {
                Name = reader["name"].ToString(),
                Weight = (float)reader["weight"]
            };
    }
}