需要将 sql 查询转换为 linq 和 return 记录列表

need to convert sql query to linq and return list of records

海使用sql查询其工作数据库端,直接没有数据库,因为它是代码优先方法。所以我需要将 sql 查询转换为 linq 查询。请任何人建议我。

SELECT  Sy.SystemUserName,
    MIN(Sc.CreatedOn) as StartedTime,   
    MAX(Sc.CreatedOn) as ExitTime,
    datediff(MINUTE, 
    MIN(Sc.CreatedOn) , 
    MAX(Sc.CreatedOn)) as WorkingHours  
 from SystemDetails Sy   
 LEFT JOIN Screenshots Sc on Sy.id = Sc.SystemId   
 where Sy.CompanyGUID =  '25' 
 AND  Sy.IsDeleted = 0
 and (datediff(dd,Sc.CreatedOn,getdate()) = 0
 Or SC.CreatedOn IS NULL) 
 GROUP By Sy.SystemUserName   

系统详细信息型号:

 public class SystemDetails 
  {
    public int Id { get; set; }

    [Required]
    public string GuidID { get; set; }

   
    [Required]
    public string SystemUserName { get; set; }

  
    [Required]
    public string CompanyGUID { get; set; }

    [Required]
    public int TeamId { get; set; }

    public User User { get; set; }

    public ICollection<Screenshot> Screenshot { get; set; }
 

   }

截图模型:

  public class Screenshot 
    {
    public int Id { get; set; }

    [Required]
    public string GuidId { get; set; }

    [Required]
    public int SystemId { get; set; }

    [Required]
    public string Screenshotname { get; set; }

    public DateTime CreatedOn { get; set; }

    public string CreatedBy { get; set; }

    public SystemDetails System { get; set; }

}

Return collection Class :

   public class UserAttendance
     {
    public string StaffName { get; set; }

    public DateTime StartTime { get; set; }

    public DateTime EndTime { get; set; }

    public string WorkingHours { get; set; }

     }

Here SystemDetails table Systemusername 和 Screenshot table 我们需要的 CreatedOn 字段,SystemDeatils Id 字段和 Screenshot SystemId 字段是关键约束。需要获取 SystemUserName 和最小创建日期作为开始时间,最大创建日期作为结束时间。我们将两个日期时间持续时间都作为 WorkingHours。我们已经使用 ef core 获得了所有值。 Incase CreatedOn date null or no date available then return '1900-01-01' default date.请推荐我

试试这个查询:

var query = 
    from sy in dbContext.SystemDetails
    from sc in sy.Screenshot
    where sy.CompanyGUID == "25" && !sy.IsDeleted
       && (sc.CreatedOn == null || EF.Functions.DateDiffDay(sc.CreatedOn.Value, DateTime.Now) == 0)
    group sc by new { sc.SystemUserName } into g 
    select new UserAttendance
    {
        StaffName = g.Key.SystemUserName,
        StartTime = g.Min(x => x.CreatedOn.Value),
        EndTime = g.Max(x => x.CreatedOn.Value),
        WorkingHours = EF.Functions.DateDiffMinute(g.Min(x => x.CreatedOn.Value), g.Max(x => x.CreatedOn.Value)).ToString()
    };