【发布时间】:2017-10-05 00:46:19
【问题描述】:
我是 LINQ 的新手,无论我如何努力让这两个查询工作,我总是以零作为结果。我已经尝试了一切来计算一个月的工作日和总天数。 MDate 绑定到日期选择器,BusinessDays 绑定到文本框,TotalDaysInMonth 绑定到另一个文本框。
有人可以帮我解决这些查询以显示所选月份的正确值吗? (例如 9 月:20 个工作日,30 天)
public class LocationViewModel : INotifyPropertyChanged
{
public LocationViewModel()
{
SetBusinessDays();
SetTotalDaysInMonth();
}
public DateTime mDate = DateTime.Now;
public DateTime MDate
{
get { return mDate; }
set
{
if (value == mDate)
{
return;
}
else
{
mDate = value;
OnPropertyChanged("MDate");
SetBusinessDays();
SetTotalDaysInMonth();
}
}
}
int _businessDays;
public int BusinessDays
{
get { return _businessDays; }
set
{
_businessDays = value;
OnPropertyChanged("BusinessDays");
}
}
int _totalDaysInMonth;
public int TotalDaysInMonth
{
get { return _totalDaysInMonth; }
set
{
_totalDaysInMonth = value;
OnPropertyChanged("TotalDaysInMonth");
}
}
private void SetBusinessDays()
{
int BusinessDays = Enumerable.Range(1, DateTime.DaysInMonth(MDate.Year, MDate.Month))
.Select(day => new DateTime(MDate.Year, MDate.Month, day))
.Count(d => d.DayOfWeek != DayOfWeek.Sunday &&
d.DayOfWeek != DayOfWeek.Saturday);
}
private void SetTotalDaysInMonth()
{
int TotalDaysInMonth = Enumerable.Range(1, DateTime.DaysInMonth(MDate.Year, MDate.Month))
.Select(day => new DateTime(MDate.Year, MDate.Month, day))
.Count();
}
}
谢谢。
【问题讨论】:
-
您设置的是局部变量,而不是您的属性。
-
删除局部变量中的
int声明。 -
我得到 22。DotNetFiddle。问题不在于您的 LINQ。
-
正如@Ephraim 所说,您在
SetBusinessDays和SetTotalDaysInMonth中有int BusinessDays = ...和int TotalDaysInMonth = ...。您基本上是在声明一个局部变量,而不是将值分配给BusinessDays和TotalDaysInMonth属性。删除int。