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

标签 c# .net linq

我正在尝试调试我的方法,但我不知道它有什么问题。

有时它会抛出错误,有时又没问题。我不知道出了什么问题。

这是我的方法:

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

最佳答案

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();

尝试使用FirstOrDefaultLastOrDefault代替FirstLast,这些方法将返回默认值如果没有元素与您作为参数提供的 lambda 表达式匹配,则调用它们的类型。

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

关于c# - Linq语句中序列不包含匹配元素错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433147/

相关文章:

c# - Linq to SQL - 如何对查询结果进行排序

c# - 按匿名类型的字段排序

c# - MemoryStream 似乎在 NPOI workbook.write 之后关闭?

c# - 如何按顺序将项目插入列表?

c# - 找不到 Kinect 音频设备 InvalidOperationException

c# - 在有或没有下一代加密技术 (CNG) 的情况下使用 ECDiffieHellman

c# - 执行 "Console.ReadKey"时允许重定向 C# 应用程序的 StandardInput

c# - .net core - 将未知数量的 IProgress<T> 传递给类库

.net - 使用 Chocolatey 或 nuget 来为另一个包中的工具添加插件

c# - 如何找到当前用户具有 WriteProperty 访问权限的 ActiveDirectory 中的所有组?