Мы определенно можем сделать эту работу, используя Raw SQL Query.
Перво-наперво, когда мы запустим этот запрос, было бы лучше получить результаты обратно в тип класса, с которым может работать Entity Framework. Я попытался получить произвольные результаты запроса обратно и нашел результаты сложным для анализа.
Мой совет - создать класс для описания результатов, которые вы получите от запроса RawSQL.
Поэтому, где бы вы ни хранили свои модели для этого проекта (или даже в новом файле), мы создадим новый класс с именем SpaceCalculations
и украсим его атрибутом [NotMapped]
, чтобы EF Core не пытался сделать это. в стол.
[NotMapped]
public class SpaceCalculations
{
public string TableName { get; set; }
public decimal TotalSpaceMB { get; set; }
}
Далее нам нужно зарегистрировать этот класс в нашем DBContext. Если вы определяете различные записи Dbset<Type>
в DBContext, добавьте следующее:
public DbQuery<SpaceCalculations> SpaceCalculations { get; set; }
Наконец, чтобы получить сами данные, я просто лениво помещаю это в действие моего контроллера Home \ Index.
public IActionResult Index()
{
List<SpaceCalculations> SpaceData = _context.SpaceCalculations.
FromSql(@"YOUR LONG SQL STATEMENT HERE").ToList();
ViewBag.SpaceInfo = SpaceData;
return View();
}
Затем, чтобы отобразить информацию, я создал следующее в моем файле Index.cshtml
.
<h2>Table Space for table ....</h2>
<table>
<tr>
<th>
TableName
</th>
<th>
TableSpace
</th>
</tr>
@foreach (SpaceCalculations SpaceRecord in ViewBag.SpaceInfo)
{
<tr>
<td>
@SpaceRecord.TableName
</td>
<td>
@SpaceRecord.TotalSpaceMB
</td>
</tr>
}
</table>
И готовый результат!
![enter image description here](https://i.stack.imgur.com/AGeB1.png)
Подробнее об этом можно прочитать здесь.