C# 如何从linq查询中删除第一个元素
我试图将每天进出时间的记录列表合并到尽可能少的记录数 到目前为止,我所做的是将这些行分组到它们需要加入的组中,并将每天的进出时间放在一个列表中 然后我想处理列表,将第一组输入和输出行添加到一行中,然后处理下一个条目,创建新行或填充前一行的空白 我一直使用的位是在我处理完linq结果后从中删除第一项 很高兴看到用不同的方式做这件事 以下是我所拥有的:C# 如何从linq查询中删除第一个元素,c#,linq,C#,Linq,我试图将每天进出时间的记录列表合并到尽可能少的记录数 到目前为止,我所做的是将这些行分组到它们需要加入的组中,并将每天的进出时间放在一个列表中 然后我想处理列表,将第一组输入和输出行添加到一行中,然后处理下一个条目,创建新行或填充前一行的空白 我一直使用的位是在我处理完linq结果后从中删除第一项 很高兴看到用不同的方式做这件事 以下是我所拥有的: List<LoginRecordLine> condensedLoginRecordLines = new List<
List<LoginRecordLine> condensedLoginRecordLines = new List<LoginRecordLine>();
List<LoginRecordLine> currentLoginRecordLines = GetLoginRecordsForLoginRecordReport(lowerDate, upperDate, sageDatabaseID, loggedInUserID);
var groupedLines = from LoginRecordLine line in currentLoginRecordLines
group line by new { line.TimesheetID, line.WorkPatternPayRateID } into g
select new
{
Lines = g,
TimesheetID = g.Key.TimesheetID,
PayRateID = g.Key.WorkPatternPayRateID
};
foreach (var g in groupedLines)
{
var monTimes = from line in g.Lines
orderby line.MonTimeIn ascending
where line.MonTimeSpan != TimeSpan.Zero
select new
{
TimeIn = line.MonTimeIn,
TimeOut = line.MonTimeOut,
Timesheet = line.Timesheet,
PayRate = line.WorkPatternPayRate
};
var tueTimes = //Same as monday
var wedTimes = //Same as monday
var thuTimes = //same as monday
var friTimes = //same as monday
var satTimes = //same as monday
var sunTimes = //same as monday
while (monTimes.Count() != 0 || tueTimes.Count() != 0 || wedTimes.Count() != 0 || thuTimes.Count() != 0 || friTimes.Count() != 0 || satTimes.Count() != 0 || sunTimes.Count() != 0)
{
LoginRecordLine condensedLine = new LoginRecordLine();
if (monTimes.Count() >0)
{
condensedLine.MonTimeIn = monTimes.First().TimeIn;
condensedLine.MonTimeOut = monTimes.First().TimeOut;
condensedLine.Timesheet = monTimes.First().Timesheet;
condensedLine.WorkPatternPayRate = monTimes.First().PayRate;
//*************** REVELANT PART *************/
//remove first item from monday list
}
// tue
// wed
// etc
}
}
return condensedLoginRecordLines;
List condentedLoginRecordlines=new List();
List currentLoginRecordLines=GetLoginRecordsForLoginRecordReport(lowerDate、upperDate、sageDatabaseID、loggedInUserID);
var groupedLines=来自currentLoginRecordLines中的LoginRecordLine
按新的{line.TimesheetID,line.WorkPatternPayRateID}将行分组到g中
选择新的
{
直线=g,
TimesheetID=g.Key.TimesheetID,
PayRateID=g.Key.WorkPatternPayRateID
};
foreach(groupedLines中的变量g)
{
var monTimes=从行到g行
orderby line.MonTimeIn升序
其中line.MonTimeSpan!=TimeSpan.Zero
选择新的
{
TimeIn=line.MonTimeIn,
超时=line.MonTimeOut,
时间表=行。时间表,
PayRate=line.workPattern PayRate
};
var tueTimes=//与星期一相同
var wedTimes=//与星期一相同
var thuTimes=//与星期一相同
var friTimes=//与星期一相同
var satTimes=//与星期一相同
var sunTimes=//与星期一相同
而(monTimes.Count()!=0 | tutimes.Count()!=0 | wedTimes.Count()!=0 | thuTimes.Count()!=0 | friTimes.Count()!=0 | satTimes.Count()!=0 | sunTimes.Count()!=0)
{
LoginRecordLine condentedline=新的LoginRecordLine();
如果(monTimes.Count()>0)
{
conclatedline.MonTimeIn=monTimes.First().TimeIn;
conclatedline.MonTimeOut=monTimes.First().TimeOut;
condentedLine.Timesheet=monTimes.First().Timesheet;
conclatedLine.WorkPatternPayRate=monTimes.First().PayRate;
//***************相关部分*************/
//从星期一列表中删除第一项
}
//星期二
//结婚
//等
}
}
返回压缩逻辑记录行;
更新-工作代码-性能更改前
List<LoginRecordLine> condensedLoginRecordLines = new List<LoginRecordLine>();
List<LoginRecordLine> currentLoginRecordLines = GetLoginRecordsForLoginRecordReport(lowerDate, upperDate, sageDatabaseID, loggedInUserID);
var groupedLines = from LoginRecordLine line in currentLoginRecordLines
group line by new { line.TimesheetID, line.WorkPatternPayRateID } into g
select new
{
Lines = g,
TimesheetID = g.Key.TimesheetID,
PayRateID = g.Key.WorkPatternPayRateID
};
foreach (var g in groupedLines)
{
var monTimes = (from line in g.Lines
orderby line.MonTimeIn ascending
where line.MonTimeSpan != TimeSpan.Zero
select new
{
TimeIn = line.MonTimeIn,
TimeOut = line.MonTimeOut,
Timesheet = line.Timesheet,
PayRate = line.WorkPatternPayRate
}).ToList();
var tueTimes = //Same as monday
var wedTimes = //Same as monday
var thuTimes = //same as monday
var friTimes = //same as monday
var satTimes = //same as monday
var sunTimes = //same as monday
while (monTimes.Count != 0 || tueTimes.Count != 0 || wedTimes.Count != 0 || thuTimes.Count != 0 || friTimes.Count != 0 || satTimes.Count != 0 || sunTimes.Count != 0)
{
LoginRecordLine condensedLine = new LoginRecordLine();
if (monTimes.Count >0)
{
condensedLine.MonTimeIn = monTimes.First().TimeIn;
condensedLine.MonTimeOut = monTimes.First().TimeOut;
condensedLine.Timesheet = monTimes.First().Timesheet;
condensedLine.WorkPatternPayRate = monTimes.First().PayRate;
condensedLoginRecordLines.Add(condensedLine);
monTimes.RemoveAt(0);
}
//etc
}
}
return condensedLoginRecordLines;
List condentedLoginRecordlines=new List();
List currentLoginRecordLines=GetLoginRecordsForLoginRecordReport(lowerDate、upperDate、sageDatabaseID、loggedInUserID);
var groupedLines=来自currentLoginRecordLines中的LoginRecordLine
按新的{line.TimesheetID,line.WorkPatternPayRateID}将行分组到g中
选择新的
{
直线=g,
TimesheetID=g.Key.TimesheetID,
PayRateID=g.Key.WorkPatternPayRateID
};
foreach(groupedLines中的变量g)
{
var monTimes=(从g.行中的行开始)
orderby line.MonTimeIn升序
其中line.MonTimeSpan!=TimeSpan.Zero
选择新的
{
TimeIn=line.MonTimeIn,
超时=line.MonTimeOut,
时间表=行。时间表,
PayRate=line.workPattern PayRate
}).ToList();
var tueTimes=//与星期一相同
var wedTimes=//与星期一相同
var thuTimes=//与星期一相同
var friTimes=//与星期一相同
var satTimes=//与星期一相同
var sunTimes=//与星期一相同
while(monTimes.Count!=0 | tutimes.Count!=0 | wedTimes.Count!=0 | thuTimes.Count!=0 | friTimes.Count!=0 | satTimes.Count!=0 | sunTimes.Count!=0)
{
LoginRecordLine condentedline=新的LoginRecordLine();
如果(monTimes.Count>0)
{
conclatedline.MonTimeIn=monTimes.First().TimeIn;
conclatedline.MonTimeOut=monTimes.First().TimeOut;
condentedLine.Timesheet=monTimes.First().Timesheet;
conclatedLine.WorkPatternPayRate=monTimes.First().PayRate;
压缩日志行。添加(压缩行);
移动月数(0);
}
//等
}
}
返回压缩逻辑记录行;
使用类似myList的内容。RemoveAt(0)将删除列表中的第一项使用类似myList的内容。RemoveAt(0)将删除列表中的第一项您应该修改算法,可能还需要修改数据结构
var monTimes = from line in g.Lines
orderby line.MonTimeIn ascending
where line.MonTimeSpan != TimeSpan.Zero
select new
{
TimeIn = line.MonTimeIn,
TimeOut = line.MonTimeOut,
Timesheet = line.Timesheet,
PayRate = line.WorkPatternPayRate,
WeekDay = DayOfWeek.Monday
};
var condensedLoginRecordLines = monTimes
.Concat(tueTimes)
.Concat(wedTimes)
..//etc
.Select(data => new CondensedLine { WeekDay = data.WeekDay, /* here all the properties are initialized */ })
.ToList();
public static List<string> GetDataLinesFromCSV(string csv)
{
var csvLines = csv.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
var dataLines = csvLines.AsQueryable().Where((x, idx) => idx > 0).ToList();
return dataLines;
}