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并选择句子.. –