[英]How can I use a list in Where of lambda function c#?
我現在有這個代碼,我想使用周末列表而不是 static 天Sunday
和Saturday
。 如何在項目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();
但這對我不起作用。 任何人都知道我該怎么做才能實現這一目標?
使用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.