【发布时间】:2019-02-12 00:27:39
【问题描述】:
我有一个Employee Appraisal 表的列表,这个表有TotalResult 字段,这个字段的值在1 到10 之间。另一个表Result Segmentation 有以下列:
Id int, Max double, Min double, Desc string
假设我有这些用于员工评估的数据:
EmpId EmpName TotalResult
--- ------- -----------
1 Jaims 1.5
2 Johny 8.3
3 Moon 5.6
4 Michle 7
5 Mariam 9
6 Kamel 4
结果分割值
Id Max Min Desc
--- --- --- -----
1 3 1 ~ 30%
2 4 3 40%
3 5 4 50%
4 6 5 60%
5 7 6 70%
6 10 7 ~ 80%
现在,用户有一个 Rate Segmentation 表的多选列表
如果用户选择 70% 和 40%,查询应该显示这些员工评价:
EmpId EmpName TotalResult
----- ------- -----------
3 Moon 5.6
6 Kamel 4
4 Michle 7
我写了这段代码
if (rateSegIds != null)
{
var rateSegs = _repositoryRateSeg.Query(x => rateSegId.Contains(x.Id)).ToList();
if (rateSeg.Any())
{
foreach (var segmentation in rateSeg)
{
query = query.Where(x => x.TotalResult > segmentation.Min && x.TotalResult <= segmentation.Max);
}
}
}
-
rateSegIds是保存用户选择的整数列表 -
rateSegs包含根据 Id 列表来自 RateSegmataions 表的记录 - 查询是
EmployeeAppraisal表的可查询对象
此代码仅在用户从列表中选择一个值时有效,如果他/她选择多个值,则查询将不返回任何内容。
因为它表现得像 "And" ,它应该表现得像 "OR" 但我不知道怎么写。
【问题讨论】:
标签: c# entity-framework