簡體   English   中英

如何在 lambda function c# 的位置中使用列表?

[英]How can I use a list in Where of lambda function c#?

我現在有這個代碼,我想使用周末列表而不是 static 天SundaySaturday 如何在項目z.DayOfWeek和周末列表之間使用相等的 function。

    DateTime start = new DateTime(2021,3,3);
    DateTime end = new DateTime(2021,3,27);
    
    List<DateTime> blackOut = new List<DateTime>
    {
        new DateTime(2021,3,10),
        new DateTime(2021,3,11)
        
    };
    
var days = Enumerable.Range(0, (int)(end - start).TotalDays)
          .Select(x => start.AddDays(x))
          .Where(z => z.DayOfWeek != DayOfWeek.Saturday && 
                      z.DayOfWeek != DayOfWeek.Sunday &&
                      !blackOut.Contains(z))
          .Count();

假設我有一個包含周末的列表,稱為周末列表,我嘗試過的是:

List<string> weekendslist = new List<string>();
weekendslist.Add(DayOfWeek.Saturday.ToString());
weekendslist.Add(DayOfWeek.Sunday.ToString());
var days = Enumerable.Range(0, (int)(end - start).TotalDays)
          .Select(x => start.AddDays(x))
          .Where(z => weekendslist.Contains(z.DayOfWeek.ToString())
                      !blackOut.Contains(z))
          .Count();

但這對我不起作用。 任何人都知道我該怎么做才能實現這一目標?

參考: 如何從兩個日期選擇器中選擇的兩個日期之間的特定持續時間中排除停電日? C#

使用Enum.IsDefined怎么樣?

enum Weekends
{
    Saturday,
    Sunday
}
var days = Enumerable.Range(0, (int)(end - start).TotalDays)
    .Select(x => start.AddDays(x))
    .Where(z => Enum.IsDefined(typeof(Weekends), z.DayOfWeek.ToString()) &&
                !blackOut.Contains(z))
    .Count();

或者另一種選擇是為DayOfWeek編寫擴展

public static class WeekendExtension
{
    public static bool IsWeekend(this DayOfWeek dayOfWeek)
    {
        return dayOfWeek == DayOfWeek.Saturday || 
            dayOfWeek == DayOfWeek.Sunday;
    }
}
var days = Enumerable.Range(0, (int)(end - start).TotalDays)
    .Select(x => start.AddDays(x))
    .Where(z => !z.DayOfWeek.IsWeekend() &&
                !blackOut.Contains(z))
    .Count();

以下代碼與您的嘗試相同,僅使用DayOfWeek枚舉值而不是字符串,並正確否定Contains

DateTime start = new DateTime(2021, 3, 3);
DateTime end = new DateTime(2021, 3, 27);
List<DateTime> blackOut = new List<DateTime>
{
    new DateTime(2021, 3, 10), 
    new DateTime(2021, 3, 11)
};
List<DayOfWeek> weekendslist = new List<DayOfWeek>
{
    DayOfWeek.Saturday,
    DayOfWeek.Sunday
};
var days = Enumerable
    .Range(0, (int)(end - start).TotalDays)
    .Select(x => start.AddDays(x))
    .Where(z => 
           !weekendslist.Contains(z.DayOfWeek) && 
           !blackOut.Contains(z))
    .Count();
Console.WriteLine(days);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM