[英]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.