如何在 linq C# SQL 命令中应用 group by 后的条件

问题描述 投票:0回答:1

我有一个查询,并且查询中的所有内容在没有最后一个条件的情况下都运行良好

(where s.Result == "Accepted" && s.TypeofRest == "Primary"
)

,我使用最后一个条件来过滤连接的表,但出现此错误:Operator == 无法应用于 IEnumerable 和 string 类型的操作数。 这是我的数据库表: 休息_TBl: ID(PK), 用户NO(F.K), 天, 休息类型, 结果


用户表: 用户名, 用户号(P.K)


解释: 两个 Rest_Tbl 和 User_Tbl 表通过 UserNO 字段关联,我想将 Rest_Tbl 表与 User_Tbl 表连接一次以访问 UserName 字段并将 User_Tbl 表与其自身连接一次以计算天数字段,我想求和(天)字段基于不同的用户号。 这是我的代码:

var query = from t in db.User_Tbl
                        join f in db.Rest_Tbl.Select(x => new { x.UserNO, x.Result, x.TypeofRest }) on t.UserNO equals f.UserNO
                        join s in db.Rest_Tbl.Select(t => new { t.UserNO, t.ID, t.Days, t.Edate, t.Bdate, t.Category, t.Result, t.TypeofRest }).GroupBy(x => x.UserNO)
                                                           .Select(g => new { UserNO = g.Key, Days = g.Sum(x => x.Days), ID = g.Key, TypeofRest = g.Select(x => x.TypeofRest), Result = g.Select(x => x.Result) })
                        on f.UserNO equals s.UserNO
                        where s.Result == "Accepted" && s.TypeofRest == "Primary"

                        select new
                        {
                            ID = s.ID,
                            UserNO = t.UserNO,
                            UserName = t.UserName,
                            Days = s.Days
                        };
            var result = query.Distinct().ToList();
            MyDataGrid.ItemsSource = result;
c# sql linq datagrid
1个回答
0
投票

匿名类型中的 TypeofRest 和 Result 是集合而不是单个值。您需要更改条件以检查集合是否包含所需的值。您可以使用 .Contains() (.MVC 中的 Contain Function)方法来实现此目的。像这样:

var query = from t in db.User_Tbl
            join f in db.Rest_Tbl
                on t.UserNO equals f.UserNO
            join s in db.Rest_Tbl
                .GroupBy(x => x.UserNO)
                .Select(g => new
                {
                    UserNO = g.Key,
                    Days = g.Sum(x => x.Days),
                    TypeofRest = g.Select(x => x.TypeofRest),
                    Result = g.Select(x => x.Result)
                })
            on f.UserNO equals s.UserNO
            where s.Result.Contains("Accepted") && s.TypeofRest.Contains("Primary")
            select new
            {
                ID = f.ID,
                UserNO = t.UserNO,
                UserName = t.UserName,
                Days = s.Days
            };
var result = query.Distinct().ToList();
MyDataGrid.ItemsSource = result;
© www.soinside.com 2019 - 2024. All rights reserved.