Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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#_.net_Linq - Fatal编程技术网

C# Linq语句中的序列不包含匹配元素错误

C# Linq语句中的序列不包含匹配元素错误,c#,.net,linq,C#,.net,Linq,我试图调试我的方法,但我不知道它出了什么问题 有时它会抛出一个错误,有时它会没事。我不知道怎么了 以下是我的方法: private void GetWorkingWeek(int month, int year) { var cal = System.Globalization.CultureInfo.CurrentCulture.Calendar; var daysInMonth = Enumerable.Range(1, cal.GetDaysIn

我试图调试我的方法,但我不知道它出了什么问题

有时它会抛出一个错误,有时它会没事。我不知道怎么了

以下是我的方法:

private void GetWorkingWeek(int month, int year)
    {
        var cal = System.Globalization.CultureInfo.CurrentCulture.Calendar;


        var daysInMonth = Enumerable.Range(1, cal.GetDaysInMonth(year, month));

        var listOfWorkWeeks = daysInMonth
            .Select(day => new DateTime(year, month, day))
            .GroupBy(d => cal.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday))
            .Select(g => Tuple.Create(g.Key, g.First(), g.Last(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday)))
            .ToList();
         foreach (var weekGroup in listOfWorkWeeks)
                {
                    Console.WriteLine("Week{0} = {1} {2} to {1} {3}"
                        , weekNum++
                        , System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month)
                        , weekGroup.Item2.Day
                        , weekGroup.Item3.Day);
                }
    }
这是出现错误的行:

var listOfWorkWeeks = daysInMonth
            .Select(day => new DateTime(year, month, day))
            .GroupBy(d => cal.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday))
            .Select(g => Tuple.Create(g.Key, g.First(), g.Last(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday)))
            .ToList();
这就是错误:

 InvalidOperationException : Sequence contains no matching element
尝试使用
FirstOrDefault
LastOrDefault
而不是
First
Last
,如果没有元素与作为参数提供的lambda表达式匹配,这些方法将返回调用它们的类型的默认值


g.FirstOrDefault()
的情况下,如果g为空,将返回默认值;在
g.FirstOrDefault的情况下(d=>d.DayOfWeek!=DayOfWeek.Saturday&&d.DayOfWeek!=DayOfWeek.Sunday)
如果所有天都是星期六或星期日,将返回默认值。

我猜是第一天()还是最后一天()方法抛出错误。您可以尝试替换FirstOrDefault()和LastOrDefault(),这将为空数据集返回null,而不是触发异常。解释可能重复1+
var listOfWorkWeeks = daysInMonth
        .Select(day => new DateTime(year, month, day))
        .GroupBy(d => cal.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday))
        .Select(g => Tuple.Create(g.Key, g.FirstOrDefault(), g.LastOrDefault(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday)))
        .ToList();