Как выполнять запросы, группировать результаты и выбирать данные, используя подход кода структуры сущности - PullRequest
0 голосов
/ 05 октября 2019

Как я могу использовать Первый подход Entity Framework Code для выполнения запросов и группировки результатов моих данных из SQL Server для получения результатов, показанных на этом изображении:

IMAGE RESULTS

Я попытался написать код, как показано ниже, но Entity Framework не нравится, и он выдает некоторые исключения:
ERROR SCREEN

жалуясь, что читатель данных не может найти некоторые столбцы, соответствующие столбцам, которые я указал в следующем классе сущностей, который я создал в этом классе.

Я думал, что приведенные ниже запросы T-SQL не поддерживаются вEntity Framework!

SELECT CASE WHEN GROUPING && GROUP BY

................................ .................................................. ...................

Ниже приведен класс ContractBOQ и класс контекста MyFirstDBContext

Table("ContractBOQ")]           // map to an existing Table called ContractBOQ
public class ContractBOQ
{
    [Key]
    [Column("SN")]
    public int SN { get; set; }
    [Required]
    [Column("Item Code")]
    public string Item_Code { get; set; }
    [Required]
    [Column("Description")]
    public String Description { get; set; }
    [Required]
    [Column("Unit")]
    public string Unit { get; set; }
    [Required]
    [Column("Quantity")]
    public decimal Quantity { get; set; }
    [Required]
    [Column("Approaved Rate")]
    public decimal Approaved_Rate { get; set; }
    [Required]
    [Column("Contract Rate")]
    public decimal Contract_Rate { get; set; }
    [Required]
    [Column("Approved Amount")]
    public decimal Approved_Amount { get; set; }
    [Required]
    [Column("Contract Amount")]
    public decimal Contract_Amount { get; set; }
    [Required]
    [Column("BOQ Part")]
    public string BOQ_Part { get; set; }

    [Required]
    [Column("Contract ID")]
    public string Contract_ID { get; set; }

    [Required]
    [Column("Road Name")]
    public string Road_Name { get; set; }

    [Required]

    [Column("Road Code")]
    public string Road_Code { get; set; }
}

public class MyFirstDBContext : DbContext
{
    public virtual DbSet<ContractBOQ> ContractBOQ { get; set; }

}

Я преобразовал T-SQL ниже в хранимых процедурах и я назвал его GetAllContracts, чтобы я мог выполнить его как Query, передав его методу Context.Database.Sqlquery ("GetAllContracts") класса Context.

Ниже представлена ​​хранимая процедура GetAllContracts , которую я создал:

CREATE OR ALTER PROC [dbo].[GetAllContracts] AS BEGIN

Select case  when grouping([SN])=1 THEN 'Sub-Total:' 
else CAST( SN as nvarchar) end SN,
case  when grouping ([Item Code])=1 THEN [Road Name] 
else [Item Code] end as [Item Code],
case  when grouping ([Description])=1 THEN [BOQ Part] 
else  [Description] end as [Description],
case  when grouping ([Unit])=1 THEN '*  *  *' ELSE [Unit]
end as [Unit],
[Quantity],[Approaved Rate] ,[Contract Rate],
sum([Approved Amount]) as[Approved Amount]
From [MyFirstDB].[dbo].[ContractBOQ]  
where [Contract ID]='RH/NTC/2019-2020/Q/01'
group by grouping sets
((SN,[Item Code],[Description],[Unit] ,[Quantity] ,
 [Approaved Rate] ,[Contract Rate],[Approved Amount],
[Contract Amount], 
[BOQ Part],[Contract ID],[Road Name],[Road Code]),
([Road Name],[BOQ Part]),([Road Name]),()) ORDER BY 
GROUPING([Road Name]) 

END

Затем я создал подпрограмму с именем LoadGrid () , которую я вызываю во время Form1_Load () событие формы 'Form1'

   private void LoadGrid()
    {
        Application.DoEvents();
        Cursor.Current = Cursors.WaitCursor;

        using (var db = new MyFirstDBContext())
        {
        var data = db.ContractBOQ.SqlQuery("GetAllContracts");
        dgvData.DataSource = data.ToList();

        dgvData.Refresh();
        dgvData.ReadOnly = true;
        }

       Cursor.Current = Cursors.Default;
    }

Это столбцы существующей таблицы с именем ContractBOQ в базе данных:
Table-ContractBOQ

При запуске я получаю эту ошибку:
ERROR SCREEN

Любая помощь, чтобы исправить эту ошибку и заставить ее работать ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...