我创建了以下视图模型:
public class PropertyViewModel
{
public PropertyViewModel(Property property, IList<PropertyImage> images)
{
this.property = property;
this.images = images;
}
public Property property { get; private set; }
public IList<PropertyImage> images { get; private set; }
}
现在我需要创建一个函数来获取数据库中的所有属性及其相关图像。是否可以使用上面的viewmodel执行此操作?我尝试了以下内容。
public IList<PropertyViewModel> GetAllPropertyViews()
{
IList<PropertyViewModel> properties = null;
foreach (var property in GetAllProperties().ToList())
{
IList<PropertyImage> images = db.PropertyImages.Where(m => m.Property.PropertyID == property.PropertyID).ToList();
properties.Add(new PropertyViewModel(property, images));
}
return properties;
}
这不起作用,它提供“对象引用未设置为对象的实例”。在properties.Add(new PropertyViewModel(property, images));
对于我正在使用的paginatation方法,我需要返回一个IQueryable变量。任何建议都将不胜感激。
答案 0 :(得分:3)
您的属性变量为null
,因此您获得NullReferenceException
- 只需使用实现IList<PropertyViewModel>
的具体类的实例对其进行初始化:
IList<PropertyViewModel> properties = new List<PropertyViewModel>();
更好的解决方案是通过使用EF PropertyImages
查询在一个查询中获取所有相关Include()
- 您的存储库层(您似乎在EF之上)必须支持这一点。目前,您正在对数据库执行N个查询,每个属性对应一个查询。
修改强>
这应该与使用EF Include()
查询相同,后者会获取每个属性的相关PropertyImages
:
var properties = db.Properties
.Include( x=> x.PropertyImages);
.Select( x => new PropertyViewModel(x, x.PropertyImages.ToList())
.ToList();