LINQ - 从嵌套列表中获取值的总数并保存在父列表中[重复]

Posted

技术标签:

【中文标题】LINQ - 从嵌套列表中获取值的总数并保存在父列表中[重复]【英文标题】:LINQ - get total count of values from nested list and save inside the parent list [duplicate] 【发布时间】:2020-07-14 01:12:32 【问题描述】:

我有一个视图模型

 public class HouseReportMainModel
    
        public int HouseId  get; set; 
        public int DisplayOrder  get; set; 
        public string HouseName  get; set; 
        public string HouseColor get; set; 
        public int TotalStudentCount  get; set; 
        public List<HouseReportViewModel> StudentList  get; set; 
    

我将使用 linq 获取学生列表,我需要获取内部列表的计数并需要在父视图模型中显示它

 var houseReportDetails = _dbContext.Set<HouseStudentMapping>()
                .AsNoTracking()
                .Include(i=>i.StudentClassMap.Student)
                .Include(i=>i.StudentClassMap.Class.Standard)
                .Include(i=>i.House)
                .Where(s => selectedClassIds.Contains(s.StudentClassMap.ClassId ?? 0) &&
                            selectedHouseIds.Contains(s.HouseId))
                .GroupBy(s => s.HouseId)
                .Select(s => new HouseReportMainModel()
                
                    HouseId = s.Key,
                    DisplayOrder = s.Select(c=>c.House.DisplayOrder).FirstOrDefault(),
                    HouseName = s.Select(c => c.House.Name).FirstOrDefault(),
                    HouseColor = s.Select(c => c.House.Color).FirstOrDefault(),
                    StudentList = s.Select(t => new HouseReportViewModel()
                    
                        StudentClassMapId = t.StudentClassMapId,
                        RollNumber = t.StudentClassMap.RollNumber??0,
                        StudentName = t.StudentClassMap.Student.Name,
                        ClassName = t.StudentClassMap.Class.Standard.Name+" "+ t.StudentClassMap.Class.Name,
                        HouseId = t.HouseId,
                        HouseName = t.House.Name,
                        ClassId = t.StudentClassMap.ClassId??0,
                        StandardId = t.StudentClassMap.Class.StandardId
                    ).ToList()
                ).ToList();

我需要TotalStudentCount = StudentList.Sum(x =&gt; x.Distinct().Count() 但是我将如何获得 linq 列表中的 TotalStudentCount 谁能帮帮我。

【问题讨论】:

你试过什么? @Roshmi 您的预期输出是一个对象而不是映射。所以不要使用.push,而是尝试obj[ keyName ] = value ***.com/questions/26264956/… 这帮助我找到了结果谢谢@Rajesh 【参考方案1】:

试试这个

let value = [
    text: 'Field0',value:'val' ,
    text: 'Field1',value:'val1' ,
    text: 'Field2',value:'val2' ,
    text: 'Field3',value:'val3' ,
    text: 'Field4',value:'val4' 
]
let newvalue = 
value.map(item => newvalue [item.text] = item.value)
console.log(newvalue )

【讨论】:

这不是 OP 所要求的。仔细查看所需的输出 这和OP的代码输出一样 你想要值数组? 我需要像 res =field0,:val0, field1:val1, field2:val2 这样的结果 我已经更新了代码

以上是关于LINQ - 从嵌套列表中获取值的总数并保存在父列表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq 从列表中获取所有匹配值的索引

如何使用 LINQ 获取列表中字段的总数? [复制]

如何使用linq c#优化嵌套循环并从另一个列表中过滤

如何使用LINQ从列表中获取重复项?

C# LINQ 从数组/列表中不包含值的位置选择

Linq,EF Core - 按一个字段分组并使用其他字段从其他表中获取数据列表