[英]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 天
Sunday
和Saturday
。 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.