Преобразование хранимой процедуры в LINQ

Я использую MVC3 и все еще изучаю LINQ. У меня проблемы с преобразованием запроса в LINQ to Entities. Я хочу вернуть метод Json

Моя хранимая процедура

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.


person Dotnet ReSource    schedule 23.08.2012    source источник


Ответы (4)


Предполагая, что вы можете передать значение в качестве параметра методу:

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);
}

Кстати, я намеренно исправил несколько написаний Employee

person D Stanley    schedule 23.08.2012
comment
@RaghuBandaru - обратите внимание на небольшое изменение синтаксиса оператора group. - person D Stanley; 23.08.2012
comment
@RaghuBandaru - измените = на == - person D Stanley; 23.08.2012

Если это действие контроллера, вы, вероятно, захотите передать идентификатор через URL-адрес. Кроме того, нет необходимости вызывать 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);
}
person James    schedule 23.08.2012
comment
@RaghuBandaru замените его ключевым словом equals - person James; 23.08.2012
comment
.yes равно принято, но я все еще получаю сообщение об ошибке JsonRequestBehaviour и выберите предложение .. - person Dotnet ReSource; 23.08.2012
comment
still getting error - Я не могу вам помочь, пока вы не опубликуете ошибку (я не тестировал код, поэтому они потенциально могут быть синтаксическими ошибками). - person James; 23.08.2012
comment
@RaghuBandaru Я пойму ... если ты скажешь мне ошибку, которую ты получаешь? - person James; 23.08.2012
comment
... в ошибке Select Statment (только декремент приращения вызова присваивания и выражение нового объекта могут использоваться в качестве статуса и JsonRequestBehaviour (в настоящее время не существует) - person Dotnet ReSource; 23.08.2012
comment
См. Обновленный ответ, отсутствовал into g вызов после оператора группы. - person James; 23.08.2012
comment
@James ... Я получаю ошибку времени выполнения в возвращаемом состоянии. ) - person Dotnet ReSource; 23.08.2012
comment
@RaghuBandaru в части select попробуйте изменить Project = ... на ProjectName = ..., и если вы получите ту же ошибку для Bugs = ..., измените это на BugCount = .... - person James; 23.08.2012
comment
Только что заметил, что строка join p in projects on b.ProjectId... должна быть join p in db.Projects on b.ProjectId.... Попробуй это. - person James; 23.08.2012
comment
@James ... Если вы не возражаете ... я не получаю значения базы данных всякий раз, когда я проверяю отладку в представлении результатов (расширение представления результатов приведет к перечислению IEnumarable) в методе Result vie в пришел ... - person Dotnet ReSource; 23.08.2012
comment
Итак, запрос выполняется, вы просто не получаете результатов сейчас? - person James; 23.08.2012
comment
@james ... в этом запросе использовался результат, показывающий Gridview ... но запрос клиента в чате Bind the Pie, поэтому я делаю этот тип - person Dotnet ReSource; 23.08.2012
comment
@RaghuBandaru Я боюсь, что привязка запроса к круговой диаграмме выходит за рамки вашего исходного вопроса. Для этого вам следует задать другой вопрос. - person James; 23.08.2012
comment
@james ... Спасибо, что помогли мне ... и ответили мне.Ок, никаких проблем, я сделаю эту работу - person Dotnet ReSource; 23.08.2012
comment
@RaghuBandaru, без проблем, если вы ищете хорошую библиотеку для построения графиков, вам следует воспользоваться инструментами Google Chart Tools. - person James; 23.08.2012

Это то, что тебе надо:

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‹> () », вы переносите все эти три таблицы в память из базы данных. Если они большие, это может быть проблемой с производительностью.

person Sako73    schedule 23.08.2012
comment
@ Sako73..Спасибо, Geven, ответ - person Dotnet ReSource; 23.08.2012

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);
}

я получил ...

person Dotnet ReSource    schedule 24.08.2012
comment
Вы не должны публиковать новый ответ на этот вопрос, поскольку вы уже приняли ответ, обновите исходный вопрос. - person James; 24.08.2012
comment
@james .. Я привязал круговую диаграмму. Теперь я привяжу BarChart In View Format, немного запутав. Можете ли вы мне помочь - person Dotnet ReSource; 24.08.2012
comment
Лучше всего задать для этого еще один вопрос. - person James; 24.08.2012