给定以下查询
public TrainingListViewModel(List<int> employeeIdList)
{
this.EmployeeOtherLeaveItemList =
CacheObjects.AllEmployeeOtherLeaves
.Where(x => x.OtherLeaveDate >= Utility.GetToday() &&
x.CancelDate.HasValue == false &&
x.OtherLeaveId == Constants.TrainingId)
.OrderBy(x => x.OtherLeaveDate)
.Select(x => new EmployeeOtherLeaveItem
{
EmployeeOtherLeave = x,
SelectedFlag = false
}).ToList();
}
我想将员工列表放入查询中。我想检索所有X. hoterleavedate值,其中每个JOIN都存在相同的X. hoterleavedate,其中x.EmployeeEid =(int int opporteeeeDlist中的int employeeId)
例如,如果员工列表中的员工1、2、3和cacheObject中的cacheObject.Allemployeotherleaves集合集合所有3名员工的日期1/1/2001,则在该日期进行回顾。
如果我读得很好,那应该是
var grp = this.EmployeeOtherLeaveItemList =
CacheObjects.AllEmployeeOtherLeaves
.Where(x => x.OtherLeaveDate >= Utility.GetToday()
&& x.CancelDate.HasValue == false
&& x.OtherLeaveId == Constants.TrainingId
&& employeeIdList.Contains(x.EmployeeId)) // courtesy @IronMan84
.GroupBy(x => x.OtherLeaveDate);
if (grp.Count() == 1)
{
var result = g.First().Select(x => new EmployeeOtherLeaveItem
{
EmployeeOtherLeave = x,
SelectedFlag = false
})
}
首先,数据由OtherLeaveDate
分组。如果分组正好在一个组中导致一个组,则采用第一个(和唯一的)IGrouping
实例(这是Leave
对象的列表),并且其内容投影到EmployeeOtherLeaveItem
s。
to where语句添加"&amp; emp; emploeeeIdlist.Contains(x.EmployeeEid)"
我需要感谢 @irranman84和@gertarnold帮助我继续前进,我将不得不劝告自己对问题没有更清楚。这是我想出的答案。毫无疑问,它可以得到改进,但是没有人回答说为什么我现在会打勾这个答案。
var numberOfEmployees = employeeIdList.Count;
var grp = CacheObjects.AllEmployeeOtherLeaves.Where(
x =>
x.OtherLeaveDate >= Utility.GetToday()
&& x.CancelDate.HasValue == false
&& x.OtherLeaveId == Constants.TrainingId
&& employeeIdList.Contains(x.EmployeeId))
.GroupBy(x => x.OtherLeaveDate)
.Select(x => new { NumberOf = x.Count(), Item = x });
var list =
grp.Where(item => item.NumberOf == numberOfEmployees).Select(item => item.Item.Key).ToList();