0

我需要刷新我所有的IQueryable<EntityObject>类型属性。

我知道您可以通过以下方式刷新集合:

someObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, someEntityObject);

但我无法获得所有属性:

//Here i want to get all the propeties    
var iQueryablePropertiesList = ViewModel.GetType().GetProperties().Where(x => x.GetType().BaseType is IQueryable<EntityObject>);

//Here i want to loop through all the properties and refresh them
foreach (var item in iQueryablePropertiesList)
{
    someObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, item.GetValue(this, null));
}

//Fire PropertyChanged for all properties
OnPropertyChanged(String.Empty);

iQueryablePropertiesList没有结果。

这样做的原因是我需要刷新所有绑定 ComboBoxes 的集合。

所以说:

  1. 这是刷新 ViewModel 中所有集合的正确方法吗?
  2. 如果没有,我应该如何解决我的问题?
  3. 如果是,我需要添加什么LINQ查询来获得我想要的结果?
4

1 回答 1

1

你有一个在线错误:

x => x.GetType().BaseType is IQueryable<EntityObject>

BaseType是类型Type,它永远不会是IQueryable<EntityObject>。并且x.GetType()还会返回一个类型,在这种情况下PropertyInfo总是。

您要输入的是:

x => typeof(IQueryable<EntityObject>).IsAssignableForm(x.PropertyType)

这将检查是否IQueryable<EntityObject>由您的属性类型实现。

public ThisType PropertyName{get;set;} 

至于这是否是一个好方法,我不认为这样反思总是一个问题,它迟早会咬你。我会简单地重新创建模型。

于 2013-01-11T11:24:34.173 回答