Как выполнить данный SQL запрос в C#?

193
26 октября 2018, 19:00
SELECT 
    tr3.TimeStart, 
    tr1.Price as PriceStart, 
    tr2.Price as PriceFinish, 
    tr3.PriceHigh, 
    tr3.PriceLow,
    tr3.Volume 
FROM TradeFill as tr1, 
    TradeFill as tr2, (
    SELECT 
        FLOOR(UNIX_TIMESTAMP(t1.TimeAdded)/(1 * 1 * 1 * 1)) AS timekey, 
        min(t1.Id) as min_id,
        max(t1.Id) as max_id,
        min(t1.TimeAdded) as TimeStart, 
        max(t1.TimeAdded) as t_max,
        min(t1.Price) as PriceLow, 
        max(t1.Price) as PriceHigh,
        SUM(t1.Quantity) as Volume
    FROM 
        TradeFill as t1
    WHERE t1.TimeAdded BETWEEN "2018-01-01 00:00:00" AND "2018-08-10 23:59:59"
    GROUP BY timekey
) as tr3
WHERE tr1.Id = tr3.min_id 
    AND tr2.Id = tr3.max_id

Пробую так:

var tradeFill = DbContext.TradeFill.FromSql(query).ToList();

Выдает ошибку

The required column 'Id' was not present in the results of a 'FromSql' operation

В TradeFill нет данных полей которые в SELECT

Как можно просто выполнить данный запрос или может как-то переписать в LINQ

Answer 1

Если вы хотите выполнить произвольный запрос, который вообще никак не связан с моделью, нужно вытащить из DbContext соединение и работать с ним напрямую через ADO.NET. Допустим, если используется база SQL Server, как-то так:

var connection = (System.Data.SqlClient.SqlConnection) DbContext.Database.Connection;
if (connection.State != ConnectionState.Open)
{
    connection.Open();
}
var dt = new DataTable();
//получаем результат запроса в DataTable...
using (var adapter = new System.Data.SqlClient.SqlDataAdapter("SELECT ...", connection))
{
    adapter.Fill(dt);
}
//далее работаем с DataTable...
foreach (DataRow dataRow in dt.Rows)
{
  foreach (var item in dataRow.ItemArray)
  {
    Console.Write(item.ToString()+"; ");
  }
  Console.WriteLine();
}
READ ALSO
Проблема с nuget в Visual Studio 2012

Проблема с nuget в Visual Studio 2012

Здраствуйте я недавно начал изучением С# установил визуал студио 2012 но каким то образом у меня нугет спрашиваеть обновление как можно решить...

170
Можно ли внедрить dll в exe? [дубликат]

Можно ли внедрить dll в exe? [дубликат]

На данный вопрос уже ответили:

157