2015-06-30 29 views
0

具有属性类型为object的模型。对象必须是WinRT中的一个字符串属性类型

型号:

public class Employee 
{ 
    private object _BirthDate; 
    public object BirthDate 
    { 
     get { return this._BirthDate; } 
     set 
     { 
      this._BirthDate = value; 
      this.RaisePropertyChanged("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展开式对数据进行排序。

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); 
} 

在数据中,结果为“对象必须是一种字符串”。

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

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

+0

我不清楚问题出在哪里。什么不行? – Chris

+2

尝试对“ABC”,null和DateTime值进行排序没有意义。你将不得不重新思考这个概念。事实上,你必须使用'object',应该打开红灯。 – Gustav

+0

@Filburt:我注意到你做了一个编辑评论“删除绒毛”,但你实际上也改变了一些代码。这是故意的吗?它从代码中删除了“lambda”的实际使用... – Chris

回答

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"); 

这是排序的,你可以很容易地解析生日,从而DateTime值:

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

我们可以通过上述方式避免异常。但是,我们可以避免与对象的类型? – user3929088

+0

我不这么认为。它必须是可排序的 - 一个字符串。 – Gustav

+0

请让我有任何参考为什么我们不能用对象完成。 – user3929088

相关问题