我有一个查询,并且查询中的所有内容在没有最后一个条件的情况下都运行良好
(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;
匿名类型中的 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;