我首先使用EF代码并且拥有包含图像记录的域模型,每个图像记录由用户上传并具有一个或多个投票。投票得分为1或-1。它基本上是“热门或不热门”的图库类型应用程序 - 每个图像都可以竖起大拇指或竖起大拇指。
我正在尝试显示具有净评级的图像列表。但是我希望尽可能高效地完成此操作,理想情况是使用一个数据库调用而不使用延迟加载。
我在我的Image类中创建了一个名为NetRating的未映射属性。我想填充这个。我正在尝试关注this method以使用投影来提取值。还有一个额外的复杂因素是它们可能是零投票,因此我需要确保在这里返回0。
public virtual IList<Image> GetListWithNetRating(
Expression<Func<Image, bool>> filter = null,
Func<IQueryable<Image>, IOrderedQueryable<Image>> orderBy = null,
string includeProperties = "",
int pageNumber = 0,
int pageSize = 0)
{
// Get standard list retrieval query from generic repository
IQueryable<Image> query = base.GetListQuery(filter, orderBy, includeProperties, pageNumber, pageSize);
// Create projection with images and net rating from votes
var projection = query.Select(x => new
{
Image = x,
User = x.User, // - included field seems to be lost when projecting, so specifically re-including it here
NetRating = (int?)x.Votes.Sum(v => v.Score) ?? 0,
});
// Update aggregate field on image
foreach (var p in projection)
{
p.Image.NetRating = p.NetRating;
p.Image.User = p.User;
}
// Return set of images
return projection.Select(p => p.Image).ToList();
}
这会导致以下错误:“内部.NET Framework数据提供程序错误1004,0,无法为不属于实体集的查询映射视图的实体构造函数指定相关实体。”
感谢是否有人可以提供建议 - 或至少翻译错误消息所指的内容。
由于
安迪