You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

逻辑说明

  1. 先关联用户表和休息表,同时筛选出Result="Accepted"且TypeOfRest="Primary"的有效记录
  2. 按UserNO分组,对每组的Days字段求和
  3. 简化版本中,分组时直接打包用户和休息记录,分组后取组内第一个用户的UserName即可(同一UserNO对应的UserName唯一)

内容的提问来源于stack exchange,提问作者Mehran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:56:13