Запуск SqlQuery для подсчета строк по дате - PullRequest
0 голосов
/ 26 января 2019

Я не очень хорош в Entity Framework, но планирую запустить необработанный запрос.Теперь я застрял с этим.При использовании следующего кода я получаю следующую ошибку:

Ошибка CS1061 «Respons» не содержит определения для «TotalCount» и нет метода расширения «Total», принимающего первый аргумент типа «Respons»'может быть найдено (вам не хватает директивы using или ссылки на сборку?)

Когда я выполняю тот же запрос в SSMS, я получаю следующий результат.

enter image description here

Respons.cs

namespace Survey.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Respons
    {
        public int ResponseID { get; set; }
        public string Username { get; set; }
        public string Name { get; set; }
        public string EmailAddress { get; set; }
        public Nullable<System.DateTime> DateTime { get; set; }
    }
}

Необработанный запрос

DbSqlQuery<Respons> Responses = DbContext.Responses.SqlQuery("SELECT max(ResponseID) AS ResponseID, COUNT(CreatedDateTime) AS Total, MAX(FORMAT(CreatedDateTime, 'dd-MMM-yyyy', 'en-US' )) as Date FROM Responses GROUP BY CAST(CreatedDateTime AS DATE) ORDER BY Date DESC");
foreach ( var r in Responses ){
   Response.Write( r.TotalCount);
}

Ответы [ 2 ]

0 голосов
/ 26 января 2019

хорошо, из сообщения очень ясно, что в вашем классе отсутствует свойство "Общее количество".

Как написать группу по запросу, перейдите по этой ссылке:

LINQ GroupBy перевод

0 голосов
/ 26 января 2019

Сначала создайте класс ViewModel следующим образом:

public class TotalCountByDateViewModel
{
   public int TotalCount { get; set; }
   public string Date { get; set; }
}

Теперь напишите ваш запрос следующим образом:

DbSqlQuery<TotalCountByDateViewModel> totalCountsByDate = DbContext.Responses
  .SqlQuery("SELECT max(ResponseID) AS ResponseID, COUNT(CreatedDateTime)
  AS Total, MAX(FORMAT(CreatedDateTime, 'dd-MMM-yyyy', 'en-US' ))
  as Date FROM Responses GROUP BY CAST(CreatedDateTime AS DATE) ORDER BY Date DESC");
...