具有属性类型为对象的模型。
型号:
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规范它删除页面。但它只是一个计算排序的表达式。
让我有任何想法解决这个问题吗?
答案 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);