Как получить все значения из SQL Query C #

Я использовал String Builder для генерации RAW SQL QUERY в C #.

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

Но это не позволит мне.

EDIT: Извините, но я не уверен, что вы имеете в виду. Вот мой отладчик

введите описание изображения здесь

Предполагая, что у вас есть 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 .

Попытайтесь использовать 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; } 

в вашем коде выше, вы пытаетесь присвоить значения элементу вместо того, чтобы извлекать.

Вы можете использовать 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"] }; } } 
  • Перевод запроса с SQL на EF Lambda expressions
  • Неверное значение типа данных операнда для оператора добавления
  • Entity Framework: Макс. число «подзапросов»?
  • LINQ: предложение Include вызывает два левых соединения, когда должен быть один
  • Улучшите мою инструкцию SQL Select, чтобы выбрать студентов, которые не полностью завершили раздел
  • EntityFramework 6.1.1 с проблемой производительности Linq
  • Как ссылаться на поле в LINQ, которое называется с использованием зарезервированного слова?
  • Как порядок объединений влияет на производительность запроса
  • Как преобразовать десятичные числа? до десятичного с использованием LINQ с хранимой процедурой
  • LINQ: Недействительный анонимный член объявления. Члены анонимного типа должны быть объявлены с назначением членов, простым именем или доступом к члену
  • Как фильтровать запрос LINQ по столбцу таблицы и получать счетчик
  • Давайте будем гением компьютера.