Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# LINQ:从投影内的嵌套列表中获取总计数_C#_Linq_Count_Nested Properties - Fatal编程技术网

C# LINQ:从投影内的嵌套列表中获取总计数

C# LINQ:从投影内的嵌套列表中获取总计数,c#,linq,count,nested-properties,C#,Linq,Count,Nested Properties,我有以下LINQ声明: var branchStatus = (from b in context.Branches join l in context.Lobbies on b.BranchId equals l.BranchId into branchLobbyDetails from bl in branchLobbyDetails.DefaultIfEmpty() where (branches.Count == 0 || branches.Contains(bl

我有以下LINQ声明:

var branchStatus = (from b in context.Branches
    join l in context.Lobbies on b.BranchId equals l.BranchId into branchLobbyDetails
    from bl in branchLobbyDetails.DefaultIfEmpty()
    where (branches.Count == 0 || branches.Contains(bl.BranchId)) 
        && b.IsActive 
        && (bl == null ? true : bl.IsActive && !bl.IsArchived)
    group bl by new { b.BranchId, b.BranchName } into grouped
    select new BranchStatusDetailsDto
    {
        Id = grouped.Key.BranchId.ToString(),
        BranchName = grouped.Key.BranchName,
        WaitingInLobby = (grouped.Any() && grouped.First() != null) ? grouped.Count(l => l.Status == 1).ToString() : defaultEmpty,
        TotalPSProvided = (grouped.Any() && grouped.First() != null) ? grouped.Where(l => l.Status != 6).Select(l => l.ServicesProvided).Count().ToString() : defaultEmpty,
        AverageAssistTime = (grouped.Any() && grouped.First() != null) ? grouped.Where(l => l.Status == 5).Select(l => (TimeSpan)(l.CompletedTime - l.AssistedTime)).Average().ToString() : string.Empty    
    });
我基本上是在收集列表中每个分支的统计数据。在projection语句中,第一次计算(
WaitingLobble
)没有问题,我对提供的
TotalPSProvidered
AverageAssistTime
有问题

对于每个分支机构,可以有多个大厅记录,并且每个大厅记录可以有0个或多个提供的
服务
条目。使用
TotalPSProvided
我想获得每个分支机构的总记录,但我得到的结果不正确-似乎在当前查询中,它给出了大厅记录的数量作为
TotalPSProvided

如何修改语句以返回正确的stat

添加实体定义:

public partial class Branch
{
    public int BranchId { get; set; }
    public string BranchName { get; set; }
    public string BranchCode { get; set; }
    public string TimeZoneId { get; set; }
    public bool IsActive { get; set; }
    public DateTime LastModifiedDate { get; set; }
}

    public partial class Lobby
{
    public Lobby()
    {
        this.ServicesRequested = new List<ServicesRequested>();
        this.ServicesProvided = new List<ServicesProvided>();
    }

    [Key]
    [Required]
    public long LobbyId { get; set; }

    [Required]
    [ForeignKey("Branch")]
    public int BranchId { get; set; }

    [ForeignKey("UserRequested")]
    public int? RequestedUserId { get; set; }

    [ForeignKey("GroupRequested")]
    public int? RequestedGroupId { get; set; }

    [ForeignKey("AddedByUser")]
    public int? AddedByUserId { get; set; }

    [ForeignKey("AssistedByUser")]
    public int? AssistedByUserId { get; set; }

    [MaxLength(1000)]
    public string Comments { get; set; }

    [Required]
    public DateTime? AddedTime { get; set; }


    public DateTime? AssistedTime { get; set; }


    public DateTime? CompletedTime { get; set; }

    [Required]
    public bool IsActive { get; set; }


    public bool IsArchived { get; set; }

    //[ForeignKey("LobbyStatus")]
    public int Status { get; set; }

    [MaxLength(50)]
    public string AccountNumber { get; set; }

    [MaxLength(50)]
    [Required]
    public string FirstName { get; set; }

    [MaxLength(50)]
    [Required]
    public string LastName { get; set; }

    //[ForeignKey("Appointment")]
    public long? FkAppointmentId { get; set; }

    [MaxLength(150)]
    public string Notes { get; set; }

    [MaxLength(20)]
    public string PhoneNumber { get; set; }

    [MaxLength(50)]
    public string EmailAddress { get; set; }

    [MaxLength(2)]
    //[Required]
    [ForeignKey("PreferredLanguage")]
    public string PreferredLanguageKey { get; set; }

    [Required]
    public bool ClosedByAutoWrapUp { get; set; }

    /// <summary>
    /// Stores the requested services as a pre-calculated string to support sorting
    /// </summary>
    public string RequestedServices { get; set; }


    public DateTime? AddedLocalTime { get; set; }


    public DateTime? AssistedLocalTime { get; set; }


    public DateTime? CompletedLocalTime { get; set; }

    [MaxLength(4)]
    public string AccountNoLastFourDigits { get; set; }

    [Required]
    public DateTime LastModifiedDate { get; set; }

    public virtual Branch Branch { get; set; }
    public virtual User UserRequested { get; set; }
    public virtual Group GroupRequested { get; set; }
    public virtual User AssistedByUser { get; set; }
    public virtual Language PreferredLanguage { get; set; }
    public virtual List<ServicesProvided> ServicesProvided { get; set; }
    public virtual List<ServicesRequested> ServicesRequested { get; set; }
}

public partial class ServicesProvided
{
    [Key]
    [Required]
    public long ServiceProvidedId { get; set; }

    [Required]
    [ForeignKey("Lobby")]
    public long LobbyId { get; set; }

    [Required]
    [ForeignKey("Service")]
    public int ServiceId { get; set; }

    [Required]
    public DateTime LastModifiedDate { get; set; }

    public virtual Lobby Lobby { get; set; }

    public virtual Service Service { get; set; }
}
公共部分类分支
{
公共整数{get;set;}
公共字符串BranchName{get;set;}
公共字符串分支代码{get;set;}
公共字符串TimeZoneId{get;set;}
公共bool IsActive{get;set;}
公共日期时间LastModifiedDate{get;set;}
}
公共部分班级大厅
{
公共大厅()
{
this.ServicesRequested=新列表();
this.ServicesProvided=新列表();
}
[关键]
[必需]
公共长游说ID{get;set;}
[必需]
[外键(“分行”)]
公共整数{get;set;}
[外键(“用户请求”)]
public int?RequestedUserId{get;set;}
[ForeignKey(“GroupRequested”)]
public int?RequestedGroupId{get;set;}
[外键(“AddedByUser”)]
公共int?AddedByUserId{get;set;}
[外键(“助手”)]
公共int?AssistedByUserId{get;set;}
[最大长度(1000)]
公共字符串注释{get;set;}
[必需]
公共日期时间?AddedTime{get;set;}
public DateTime?AssistedTime{get;set;}
公共日期时间?CompletedTime{get;set;}
[必需]
公共bool IsActive{get;set;}
公共布尔是归档的{get;set;}
//[ForeignKey(“LobbyStatus”)]
公共int状态{get;set;}
[MaxLength(50)]
公共字符串AccountNumber{get;set;}
[MaxLength(50)]
[必需]
公共字符串名{get;set;}
[MaxLength(50)]
[必需]
公共字符串LastName{get;set;}
//[外键(“任命”)]
public long?FkAppointmentId{get;set;}
[MaxLength(150)]
公共字符串注释{get;set;}
[MaxLength(20)]
公共字符串PhoneNumber{get;set;}
[MaxLength(50)]
公共字符串电子邮件地址{get;set;}
[MaxLength(2)]
//[必需]
[外键(“首选语言”)]
公共字符串PreferredLanguageKey{get;set;}
[必需]
公共bool closedbyautorrapup{get;set;}
/// 
///将请求的服务存储为预先计算的字符串,以支持排序
/// 
公共字符串RequestedServices{get;set;}
public DateTime?AddedLocalTime{get;set;}
public DateTime?AssistedLocalTime{get;set;}
公共日期时间?CompletedLocalTime{get;set;}
[MaxLength(4)]
公共字符串AccountNoLastFourDigits{get;set;}
[必需]
公共日期时间LastModifiedDate{get;set;}
公共虚拟分支分支{get;set;}
公共虚拟用户userrequest{get;set;}
公共虚拟组GroupRequested{get;set;}
公共虚拟用户AssistedByUser{get;set;}
公共虚拟语言首选语言{get;set;}
公共虚拟列表服务提供{get;set;}
请求的公共虚拟列表服务{get;set;}
}
已提供公共部分类服务
{
[关键]
[必需]
公共长服务提供ID{get;set;}
[必需]
[外键(“大厅”)]
公共长游说ID{get;set;}
[必需]
[外键(“服务”)]
public int ServiceId{get;set;}
[必需]
公共日期时间LastModifiedDate{get;set;}
公共虚拟大厅{get;set;}
公共虚拟服务服务{get;set;}
}

我认为这是您查询中的一个输入错误,您正在计算提供的
服务
而不是将它们相加,您正在这样做:

TotalPSProvided = (grouped.Any() && grouped.First() != null) ? grouped.Where(l => l.Status != 6).Select(l => l.ServicesProvided).Count().ToString() : defaultEmpty,
与此相反:

TotalPSProvided = (grouped.Any() && grouped.First() != null) ? grouped.Where(l => l.Status != 6).Sum(l => l.ServicesProvided).ToString() : defaultEmpty,

我认为这是您的查询中的一个输入错误,您正在计算提供的
服务
,而不是将它们相加,您正在这样做:

TotalPSProvided = (grouped.Any() && grouped.First() != null) ? grouped.Where(l => l.Status != 6).Select(l => l.ServicesProvided).Count().ToString() : defaultEmpty,
与此相反:

TotalPSProvided = (grouped.Any() && grouped.First() != null) ? grouped.Where(l => l.Status != 6).Sum(l => l.ServicesProvided).ToString() : defaultEmpty,

TotalPSProvided
的问题如下:

grouped.Where(l => l.Status != 6).Select(l => l.ServicesProvided).Count()
在这里,您只需计算满足where条件的(分支、大厅)对的数量

返工成:

TotalPSProvided = (grouped.Any() && grouped.First() != null) 
                    ? grouped.Where(l => l.Status != 6)
                             .Sum(l => l.ServicesProvided.Count()).ToString() 
                    : defaultEmpty,

TotalPSProvided
的问题如下:

grouped.Where(l => l.Status != 6).Select(l => l.ServicesProvided).Count()
在这里,您只需计算满足where条件的(分支、大厅)对的数量

返工成:

TotalPSProvided = (grouped.Any() && grouped.First() != null) 
                    ? grouped.Where(l => l.Status != 6)
                             .Sum(l => l.ServicesProvided.Count()).ToString() 
                    : defaultEmpty,

你能添加你的实体吗<代码>分支机构和大厅您可以添加您的实体吗<代码>分支机构和大厅谢谢,这是我的错误。谢谢,这是我的错误。