C# LINQ分组后添加筛选条件报错:无法比较IEnumerable与字符串
问题解决
错误根源:你在分组后的Select中,用g.Select(x => x.TypeofRest)和g.Select(x => x.Result)得到的是字符串集合(IEnumerable==做比较。
正确逻辑应该是先筛选符合条件的Rest_Tbl记录,再分组求和,同时可以简化你原有的冗余关联逻辑:
修正代码(版本1)
var query = from u in db.User_Tbl join r in db.Rest_Tbl on u.UserNO equals r.UserNO where r.Result == "Accepted" && r.TypeOfRest == "Primary" group r by u.UserNO into g join u2 in db.User_Tbl on g.Key equals u2.UserNO select new { ID = g.Key, UserNO = g.Key, UserName = u2.UserName, Days = g.Sum(x => x.Days) }; var result = query.Distinct().ToList(); MyDataGrid.ItemsSource = result;
更简化的版本(无需二次关联)
var query = from u in db.User_Tbl join r in db.Rest_Tbl on u.UserNO equals r.UserNO where r.Result == "Accepted" && r.TypeOfRest == "Primary" group new { u, r } by u.UserNO into g select new { ID = g.Key, UserNO = g.Key, UserName = g.First().u.UserName, Days = g.Sum(x => x.r.Days) }; var result = query.ToList(); MyDataGrid.ItemsSource = result;
逻辑说明
- 先关联用户表和休息表,同时筛选出
Result="Accepted"且TypeOfRest="Primary"的有效记录 - 按UserNO分组,对每组的Days字段求和
- 简化版本中,分组时直接打包用户和休息记录,分组后取组内第一个用户的UserName即可(同一UserNO对应的UserName唯一)
内容的提问来源于stack exchange,提问作者Mehran
相关产品推荐
相关产品推荐

