2

我正在使用MVC3並仍在學習LINQ。我在嘗試將查詢轉換爲LINQ to Entities時遇到了一些麻煩。我想返回的Json方法將存儲過程轉換爲LINQ

我的存儲過程

Create Procedure [dbo].[ResourceReports] 
(
    @EmployeeID int 
) 
as 
begin 
    select p.projectName AS Projects, count(b.[CreatedByID]) AS Bugs 
    from [EmployeeDetails] e inner join [Bugs] b on e.[EmployeId] = b.[CreatedByID] 
    inner join Projects p on b.ProjectId = p.ProjectId 
    where e.[EmployeId] = @EmployeeID 
    group by P.projectName 
end 

我所擁有的是幾桌,我開始在LINQ寫這個了,但我不知道如何正確地返回正確的類型或施展此。

我控制器

public JsonResult Getchart() 
{ 
    var Bug = db.Bugs.ToList<Bug>(); 
    var EmployeDetails = db.EmployeeDetails.ToList<EmployeeDetail>(); 
    var projects = db.Projects.ToList<Project>(); 

    var result = (from e in EmployeDetails 
        join b in Bug on e.EmployeId equals b.CreatedByID 
        join p in projects on b.ProjectId equals p.ProjectId 
        where e.EmployeId = @EmployeId 
        group p.projectName 
        select new (p.projectName as Project ,count(b.CreatedByID) as Bug)).Take(50); 

    return Json(result,JsonRequestBehavior.AllowGet); 
} 

我將如何傳遞參數,爲查詢,希望數據以JSON格式返回。

回答

0
public JsonResult GetChart() 
      { 
       //int employeeId 
       var Bug = db.Bugs.ToList<Bug>(); 
       var EmployeDetails = db.EmployeeDetails.ToList<EmployeeDetail>(); 
       var projects = db.Projects.ToList<Project>(); 

       var query = (from e in EmployeDetails 
          join b in Bug on e.EmployeId equals b.CreatedByID 
          join p in projects on b.ProjectId equals p.ProjectId 
          where e.EmployeId == 1 
          group new { p, b } by new 
          { 
           p.projectName 
          } into g 
          select new ChartModel 
          { 
           ProjectName = g.Key.projectName,      

           bug = g.Count() 
          }).ToList(); 
       return Json(query, JsonRequestBehavior.AllowGet); 
} 

我有...

+0

考慮到您已經接受了答案,請不要爲此發佈新答案,請更新您的原始問題。 – James

+0

@ james..Ok James –

+0

@james ..我已經綁定了餅圖,現在我將綁定BarChart視圖格式在littile位混淆.can你可以幫我 –

1

假設你可以在傳遞值作爲參數傳遞給方法:

public JsonResult Getchart(int employeeId) 
{ 
    var Bug = db.Bugs.ToList<Bug>(); 
    var EmployeeDetails = db.EmployeeDetails.ToList<EmployeeDetail>(); 
    var projects = db.Projects.ToList<Project>(); 

    var result = (from e in EmployeeDetails 
        join b in Bug on e.EmployeeId equals b.CreatedByID 
        join p in projects on b.ProjectId equals p.ProjectId 
        where e.EmployeeId == employeeId // <-- use the parameter here 
        group p by p.projectName into g 
        select new { 
        Project = g.Key, 
        Bug = g.Count() 
        } 
       ).Take(50); 
    return Json(result,JsonRequestBehavior.AllowGet); 
} 

BTW我故意修正的Employee

+0

@D Standaley ...謝謝你geven答案..我檢查現在.. –

+0

@RaghuBandaru - 請在組語句的語法略有變化。 –

+0

@D Standaley ...我得到錯誤在哪裏陳述 –

1

幾個拼寫這是你所需要的:

public JsonResult Getchart(int employeId) 
    { 
     var Bug = db.Bugs.ToList<Bug>(); 
     var EmployeDetails = db.EmployeeDetails.ToList<EmployeeDetail>(); 
     var projects = db.Projects.ToList<Project>(); 

     var result = (from e in EmployeDetails 
         join b in Bug on e.EmployeId equals b.CreatedByID 
         join p in projects on b.ProjectId equals p.ProjectId 
         where e.EmployeId == employeeId 
         group p.projectName 
        select new (p.projectName as Project ,count(b.CreatedByID) as Bug)).Take(50); 
         return Json(result,JsonRequestBehavior.AllowGet); 
    } 

您確定要執行所有這些「ToList <>()」調用嗎?一旦你調用「ToList <>()」,你將所有這三個表從數據庫中帶入內存。如果它們很大,那可能是一個性能問題。

+0

@ Sako73 ..謝謝你geven回答 –

1

如果這是一個控制器操作,您可能希望通過URL傳遞該ID。另外,在查詢之前,不需要在的表上調用ToList,在數據庫上進行查詢並且僅下拉結果例如

public JsonResult GetChart(int employeeId) 
{ 
    var query = (from e in db.EmployeeDetails 
       join b in db.Bugs on e.EmployeeId equals b.CreatedById 
       join p in db.Projects on b.ProjectId equals p.ProjectId 
       where e.EmployeeId == employeeId 
       group new {p, b} by new { 
        p.ProjectName 
       } into g 
       select new { 
        Project = g.Key.Name, 
        Bugs = g.Count() 
       }).Take(50); 
    return Json(query.ToList(), JsonRequestBehaviour.AllowGet); 
} 
+0

@詹姆斯..這裏沒有采取== –

+0

@RaghuBandaru更改爲'等於'關鍵字代替 – James

+0

.yes等於被採納,但仍然出現錯誤JsonRequestBehaviour並選擇句子.. –