Dmitri S.
Dmitri S.

Reputation: 3438

Trying to convert sql query to linq to sql

I am running into problem with converting sql from stored procedure to the linq to sql code. The query basically groups items and returns sum for the number value.

The code I have been trying to make is executes, but it doesn't group items and the sum doesn't work either. I just get values like if I would get without any group by and without sum.

It's also seems like it has no regards to the organization I want it to select from.

Sql code is works, the linq to sql conversion is the one that makes problems.

I would appreciate if anyone can point me with what I am doing wrong.

Sql code:

CREATE TABLE #T1 (a varchar(255), b varchar(255), c varchar(250), d varchar(250), e varchar(250), ACAP int);



INSERT INTO #T1
Select SubProgram AS a, SubSubProgram as b, SubSubSubProgram as c, Sub4Program as d, Su5Program as e, Sum(Deliverable1) AS ACAP
 FROM LogicModel.Deliverables, LogicModel.ProgramNumbers
 WHERE 
    LogicModel.ProgramNumbers.OrganizationName = @OrganizationName AND
    LogicModel.ProgramNumbers.ProgramNumber = LogicModel.Deliverables.ProgramNumber AND
    LogicModel.Deliverables.FiscalYear = @FiscalYear AND
    LogicModel.Deliverables.Program = (09-10.1a) 'Education presentations by type'
GROUP BY
    SubProgram, SubSubProgram, SubSubSubProgram , Sub4Program, Sub5Program


SELECT a, b, c, d, e, isnull(ACAP, 0) as ACAP from #T1

Linq to Sql

  var deliverables = (from de in OCHART.Deliverables
                                join pn in OCHART.ProgramNumbers on de.ProgramNumber equals pn.ProgramNumber1 into prt
                                from x in prt.Where(prt2 => prt2.OrganizationName.Equals(organization)).DefaultIfEmpty()
                                where de.FiscalYear == FiscalYear && de.Program.Equals("(09-10.1a) Education presentations by type")
                                group de by new { SubProgram = de.SubProgram, SubSubProgram = de.SubSubProgram, SubSubSubProgram = de.SubSubSubProgram, Sub4Program = de.Sub4Program, Sub5Program = de.Sub5Program, deliverable = de.Deliverable1 } into gr
                                select new
                                {
                                    SubProgram = gr.Key.SubProgram,
                                    SubSubProgram = gr.Key.SubSubProgram,
                                    SubSubSubProgram = gr.Key.SubSubSubProgram,
                                    Sub4Program = gr.Key.Sub4Program,
                                    Sub5Program = gr.Key.Sub5Program,
                                    deliverable1 = gr.Sum(g => g.Deliverable1),
                                    deliverable2 = gr.Sum(g => g.Deliverable2)
                                }).ToList();

Thanks for taking time and trying to help. I appreciate it.

Upvotes: 1

Views: 203

Answers (1)

Rajesh
Rajesh

Reputation: 1469

Quick solution(WorkAround):

Why don't you run the stored procedure you have. Since your stored procedure is already tested. It would save your time.

Just drag and drop the stored procedure to your DBML file. All you have to do is use it.

Upvotes: 1

Related Questions