Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从linq查询中删除第一个元素_C#_Linq - Fatal编程技术网

C# 如何从linq查询中删除第一个元素

C# 如何从linq查询中删除第一个元素,c#,linq,C#,Linq,我试图将每天进出时间的记录列表合并到尽可能少的记录数 到目前为止,我所做的是将这些行分组到它们需要加入的组中,并将每天的进出时间放在一个列表中 然后我想处理列表,将第一组输入和输出行添加到一行中,然后处理下一个条目,创建新行或填充前一行的空白 我一直使用的位是在我处理完linq结果后从中删除第一项 很高兴看到用不同的方式做这件事 以下是我所拥有的: List<LoginRecordLine> condensedLoginRecordLines = new List<

我试图将每天进出时间的记录列表合并到尽可能少的记录数

到目前为止,我所做的是将这些行分组到它们需要加入的组中,并将每天的进出时间放在一个列表中

然后我想处理列表,将第一组输入和输出行添加到一行中,然后处理下一个条目,创建新行或填充前一行的空白

我一直使用的位是在我处理完linq结果后从中删除第一项

很高兴看到用不同的方式做这件事

以下是我所拥有的:

       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;
}