2015-04-03 80 views
0

我有一個帶子模型的模型。是否有一種簡單的方法爲所有空的子模型創建空白子模型?現在我做了類似以下的事情,但房間也可以有子模型。無需檢查所有子模型是否爲空,是否有一種簡單的方法來獲取並自動填充空白爲空的所有子模型?如何在空白子模型爲空時創建空白子模型

House house = _houseRepository.Entity.ByHouseId(houseId).First(); 

house = house == null ? new House { } : house; 

house.Room = house.Room == null ? new Room { } : house.Room; 
+0

我想這樣做的房子=房子?新的房子{},並有它填充所有的空子模型,但它不 – user1854438 2015-04-03 16:03:20

+0

請留下我對**解決方案的反饋1 ​​* – adricadar 2015-04-03 17:36:33

回答

0

解決方案1:您可以使用反射來創建一個空的屬性實例。我創建了一個方法,它將創建一個的第一級的實例,如下所示。

public TModel FillNullWithBlankInstances<TModel>(TModel model) where TModel : class 
{ 
    var type = model.GetType(); 
    var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); 
    foreach (var prop in properties) 
    { 
     var value = prop.GetValue(model, null); 
     if (value == null) // null property than create instance 
     { 
      var instance = Activator.CreateInstance(prop.PropertyType, false); 
      prop.SetValue(model, instance); 
     } 
    } 
    return model; 
} 

用法:

House house = _houseRepository.Entity.ByHouseId(houseId).First(); 
house = FillNullWithBlankInstances(house); 

解決方案2:您可以使用??這將檢查空,如果爲空將使用的是在這之後像下面。有關更多示例,您可以查看documentation

House house = _houseRepository.Entity.ByHouseId(houseId).First(); 
house = house ?? new House { }; 
house.Room = house.Room ?? new Room { }; 

我建議你做一個函數,在你需要的時候爲你做這個。

public House FillNullWithBlankInstances(House house) 
{ 
    house = house ?? new House { }; 
    house.Room = house.Room ?? new Room { }; 
    return house; 
} 

和使用將是:

House house = _houseRepository.Entity.ByHouseId(houseId).First(); 
house = FillNullWithBlankInstances(house); 
+0

所以,如果我有house.Agent和house.Room我可以用房子??新房子{},它將爲代理和房間製作一個空白模型? – user1854438 2015-04-03 16:01:23

+0

我不想手動檢查子模型 – user1854438 2015-04-03 16:06:07

+0

我現在明白你的問題。這隻會使「房子」成爲一個實例。 – adricadar 2015-04-03 16:07:05