对象必须是WinRT中的一种字符串属性

时间:2015-06-30 07:32:38

标签: c# wpf

具有属性类型为对象的模型。

型号:

public class Employee
{
    private object _BirthDate;
    public object BirthDate
    {
        get { return this._BirthDate; }
        set
        {
            this._BirthDate = value;
            this.RaisePropertyChanged("BirthDate");
        }
    }
}

查看型号:

为BirthDate填充数据,如下所示。

if (i % 5 == 0)
{
    emp.BirthDate = "ABC";
    //  emp.Name = "NUll";
}
else if (i % 4 == 0)
{
    emp.BirthDate = null;
    // emp.Name = "DBNull";
}
else
    emp.BirthDate = new DateTime(1 / 1 / 2013);

有100个出生日期。我尝试使用LINQ查询和LAMDA exressions对数据进行排序。

private void GetSortedQuerableCollection_Click(object sender, RoutedEventArgs e)
{
    var sourceType = new Employee().GetType();

    var source = (this.datagrid.ItemsSource as IEnumerable).AsQueryable() as IQueryable;
    var paramExpression = Expression.Parameter(source.ElementType, sourceType.Name);
    var lambda = GetLambdaWithComplexPropertyNullCheck(source, "BirthDate", paramExpression, sourceType);

    var data = OrderBy(source, "BirthDate", sourceType);
}

在数据中,使用"对象的结果必须是String"的类型。

注意:GetLambdaWithComplexPropertyNullCheck是具有大量代码的方法。如果我也包括它,它看起来不一致,并根据StackOverFlow规范它删除页面。但它只是一个计算排序的表达式。

让我有任何想法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果必须混合日期,空和非日期,请使用字符串:

public class Employee
{
    private string = null;
    public string BirthDate
    {
        get { return this._BirthDate; }
        set
        {
            this._BirthDate = value;
            this.RaisePropertyChanged("BirthDate");
        }
    }
}

然后:

emp.BirthDate = new DateTime(2013, 1 , 21).ToString("yyyy'-'MM'-'dd");

这是可排序的,您可以轻松地将BirthDate解析为DateTime值:

DateTime trueDate = DateTime.Parse(emp.BirthDate);