简体   繁体   English

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

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

I have this code now and I would like to use a list of weekend instead of static days Sunday and Saturday .我现在有这个代码,我想使用周末列表而不是 static 天SundaySaturday How can I use the equal function between an item z.DayOfWeek and a list of weekend.如何在项目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();

Suppose that I have a list that contains weekend called weekendslist, what I have tried is:假设我有一个包含周末的列表,称为周末列表,我尝试过的是:

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

But this does not work for me.但这对我不起作用。 Anyone have any idea how can I do to achieve this?任何人都知道我该怎么做才能实现这一目标?

Ref: How to exclude blackout days from a specific duration between two dates chosen from a two Datepicker?参考: 如何从两个日期选择器中选择的两个日期之间的特定持续时间中排除停电日? C# C#

How about using Enum.IsDefined ?使用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();

Or another option would be to write an extension for DayOfWeek或者另一种选择是为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();

The following code is the same as your attempt, only using DayOfWeek enum values instead of strings, and properly negating the Contains :以下代码与您的尝试相同,仅使用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.

相关问题 如何在 C# 中的 lambda 函数中使用 if 语句 - How to use an if statement in a lambda function in C# 如何使用 Lambda 表达式在 C# 中使用来自 LinkedList 中多个节点的变量来计算函数<object> ?一世 - How can I use a Lambda Expression to calculate a function in C# with variables from multiple nodes in a LinkedList<object>?i C#在Linq和Lambda中联接/在哪里如何返回列表<T> - C# Joins/Where with Linq and Lambda how to return a List<T> 我如何在 c# 中使用二进制搜索来获取通用列表 - how can i use binary search in c# for generic list 如何使用多线程处理 C# 中的列表? - How can i use multithreading to handle a list in C#? 如何在C#中的query-expression的select标记中使用lambda-expression - How can I use a `lambda-expression` in the `select` tokens of a `query-expression` in C# 我如何在C#中使用concat sql函数? - how can i use the concat sql function in c#? 如何在字典中使用Function作为值? (C#) - How can I use Function as value in dictionary? (C#) 如何在 c# 中返回代表 function 或 lambda 表达式? - How do I return a delegate function or a lambda expression in c#? 在 C# 中,如何创建需要访问多个列表类型的可重用方法? - In C#, how can I create a reusable method where I need to access multiple list types?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM