将月份参数从Binded DatePicker传递到LINQ方法MVVM EF



我正在寻找一种将所选月份从日期选择器传递到我查询的方法,以使查询动态。如何将 9 替换为日期点的月份?我在想 a.smonth = dateTime.month(mdate))的线条,但它不起作用。简单的建议非常欢迎。谢谢!

ps:桌子上的smonth很长。

namespace Location.ViewModel
{
    public class LocationViewModel: INotifyPropertyChanged
    {

        public LocationViewModel()
        {
            var db = new DailyEntities();
            Efficiency = Convert.ToDecimal(db.LocationKPI.Where(a => a.sMonth == 9).Select(a => a.Efficiency).FirstOrDefault());
        }
        private DateTime _mDate = DateTime.Now;
        public DateTime MDate
        {
            get { return _mDate; }
            set { _mDate = value; OnPropertyChanged("MDate"); }
        }
        decimal efficiency;
        public decimal Efficiency
        {
            get { return efficiency; }
            set
            {
                efficiency = value;
                OnPropertyChanged("Efficiency");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName = null)
        {
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

以下代码将从9月30日的日期开始获得数字9。

        var MDate = new DateTime();
        MDate = DateTime.Now;
        var month = 0;
        int.TryParse(MDate.ToString("MM"), out month);

我已经使用了MDATE变量名称,因此它适合您的现有代码,因此您可以忽略前两行。

DateTime.ToString("MM")以" 09"的格式获取一个月,但是如果我们尝试将其与整数9进行比较,则整数将被隐式转换为字符串" 9"。由于" 9"one_answers" 09"不匹配,因此我们必须将" 09"转换为整数。int.TryParse()是最安全的方法。

现在您有一个月份中的一个月,可以在查询中使用它。

    public LocationViewModel()
    {
        var db = new DailyEntities();
        // Get the month from the date picker
        var month = 0;
        int.TryParse(MDate.ToString("MM"), out month);
        Efficiency = Convert.ToDecimal(db.LocationKPI.Where(a => a.sMonth == month).Select(a => a.Efficiency).FirstOrDefault());
    }

最新更新