簡體   English   中英

如何從SQL查詢C#獲取所有值

[英]How to get all the values from an SQL Query C#

我已經使用String Builder在C#中生成RAW SQL查詢。

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;
}

但這不會讓我。

編輯:對不起,但我不確定您的意思。 這是我的調試器

在此處輸入圖片說明

如果沒有錯誤返回,請嘗試像這樣使用foreach

foreach(var v in result)
{
    String v0 = v[0].ToString();
    String v1 = v[1].ToString();
}

我希望這有幫助。

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

在上面的代碼中,您嘗試將值分配給項目,而不是檢索。

假設您的EF> 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語句中指定它們也是如此。

您可以使用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"]
            };
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM