Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Where和GroupBY将sql转换为linq_C#_Sql_Linq - Fatal编程技术网

C# 使用Where和GroupBY将sql转换为linq

C# 使用Where和GroupBY将sql转换为linq,c#,sql,linq,C#,Sql,Linq,SQL: 我试过LINQ: SELECT p.PipelineID , MAX(PipelineJobStatus.CreatedTimeStamp) , Client.ClientName , FCO.NameFCO , p.ProjectValueHr , p.ProjectValueMoney , p.CommentPipeline , PipelineJobStatus.CreatedTimeSTamp , p.ModifiedTimeStamp , Employee.Name ,

SQL:

我试过LINQ:

SELECT  
p.PipelineID
, MAX(PipelineJobStatus.CreatedTimeStamp)
, Client.ClientName
, FCO.NameFCO
, p.ProjectValueHr
, p.ProjectValueMoney
, p.CommentPipeline
, PipelineJobStatus.CreatedTimeSTamp
, p.ModifiedTimeStamp
, Employee.Name
, Employee.Surname
, JobStatus.JobStatusName
FROM (Pipeline p 
LEFT OUTER JOIN PipelineJobStatus ON p.PipelineID = PipelineJobStatus.PipelineID)
INNER JOIN JobStatus ON (PipelineJobStatus.JobStatusID = JobStatus.JobStatusID)
LEFT OUTER JOIN Client ON (p.ClientID = Client.ClientID)
LEFT OUTER JOIN FCO ON (p.FCOID = FCO.FCOID) 
LEFT OUTER JOIN Employee ON (p.CreatedBy = Employee.EmployeeD)
WHERE PipelineJobStatus.CreatedTimeStamp IN 
   (SELECT MAX(CreatedTimeStamp) FROM PipelineJobStatus GROUP BY PipelineID)
GROUP BY p.PipelineID
, Client.ClientName
, FCO.NameFCO
, p.ProjectValueHr
, p.ProjectValueMoney
, p.CommentPipeline
, PipelineJobStatus.CreatedTimeSTamp
, p.ModifiedTimeStamp
, Employee.Name
, Employee.Surname
, JobStatus.JobStatusName
.Where()
子句用红色下划线

我错在哪里

SQL正在运行 我将改变这个链表,使用连接,现在我只想工作


也许存储过程在这里并不是一个糟糕的选择。

只是想一想——也许在数据库中为此创建存储过程或视图更容易些?我打赌它会更高效,更容易被其他开发人员理解。因为这样的linq查询无法维护。您可以从EF或Linq调用SP到SQL。为什么要使用Linq?SQL总是faster@Viru可能会更新一个旧项目,使用Entity Framework删除带有测试和托管代码的潜在易出错代码,以便将SQL行转换为C#对象。它增加了可测试性并缩短了开发时间。代码中的SQL总是比可以重构的对象更难维护,也更难保护。我不确定我是否同意SQL总是更快这一事实。您必须维护自己的数据阅读器等。。在性能方面,SQL更快,但是的,我同意,如果你考虑代码维护和可测试性,那么EF要好得多……只是想,在数据库中创建存储过程或视图更容易吗?我打赌它会更高效,更容易被其他开发人员理解。因为这样的linq查询无法维护。您可以从EF或Linq调用SP到SQL。为什么要使用Linq?SQL总是faster@Viru可能会更新一个旧项目,使用Entity Framework删除带有测试和托管代码的潜在易出错代码,以便将SQL行转换为C#对象。它增加了可测试性并缩短了开发时间。代码中的SQL总是比可以重构的对象更难维护,也更难保护。我不确定我是否同意SQL总是更快这一事实。您必须维护自己的数据阅读器等。。在性能方面,SQL更快,但是的,我同意,如果你考虑代码维护和可测试性,那么EF要好得多。
 from pjs in db.PipelineJobStatus
 //.OrderByDescending(p=>p.CreatedTimeStamp)
 //.DistinctBy(p => p.PipelineID)
 //.FirstOrDefault()
 from pipe in db.Pipelines
    .Where(pipe => pipe.PipelineID == pjs.PipelineID).DefaultIfEmpty()
 from status in db.JobStatus
    .Where(statuses => statuses.JobStatusID == pjs.JobStatusID)
    .DefaultIfEmpty()
 from fco in db.FCOes
    .Where(fcoes => fcoes.FCOID == pipe.FCOID)
 from client in db.Clients
    .Where(clients => clients.ClientID == pipe.ClientID)
    //Where PipelineJobStatus.CreatedTimeStamp in (select max(CreatedTimeStamp) from PipelineJobStatus group by PipelineID)
    .Where(pjs.CreatedTimeStamp in select Max(pjs.CreatedTimeStamp)from PipelineJobStatus group by)
  group by { pipe.PipelineID } //group new
          by new
          {
              status.JobStatusName,
              pipe.PipelineID,
              pipe.ClientID,
              client.ClientName,
              fco.NameFCO,
              fco.FCOID,
              pipe.Employee.Name,
              pipe.Employee.Surname,
              pipe.CommentPipeline,
              pipe.CreatedBy,
              pipe.CreatedTimeStamp,
              pipe.ModifiedTimeStamp,
              pipe.ProjectValueHr,
              pipe.ProjectValueMoney
          } into g

           orderby g.Key.PipelineID descending

           select new StatusPipelineMerge
           {
               PipelineID = g.Key.PipelineID,
               ProjectValueHr = g.Key.ProjectValueHr,
               ProjectValueMoney = g.Key.ProjectValueMoney,
               CommentPipeline = g.Key.CommentPipeline,
               ClientName = g.Key.ClientName,
               FCOName = g.Key.NameFCO,
               FCOID = g.Key.FCOID,
               ClientID = g.Key.ClientID,
               CreatedTimeStamp = g.Key.CreatedTimeStamp,
               ModifiedTimeStamp = g.Key.ModifiedTimeStamp,
               CreatedBy = g.Key.CreatedBy,
               //CreatedNameSurname = g.Key.Employee.Name + " " + g.Key.Employee.Surname
               JobStatusName = g.Key.JobStatusName
           }