我对评论有评论和投票。
[Table("QAComment")]
public class QaComment : IEntity
{
[Key, Column("QACommentID")]
public int Id { get; set; }
// ...
public virtual ICollection<QaCommentVote> Votes { get; set; }
[NotMapped]
public int OverallVote { get; set; }
}
[Table("QACommentVote")]
public class QaCommentVote : IEntity
{
[Key, Column("QACommentVoteID")]
public int Id { get; set; }
[ForeignKey("QAComment")]
public int QaCommentId { get; set; }
public int Value { get; set; }
public virtual QaComment QaComment { get; set; }
}
我需要对他们的投票总数进行评论,不要将所有投票都拉到申请。
我能看到的方式来实现这个目标:
1.为Commment创建一个数据库视图,并在那里计算投票总和
缺点:不想做额外的观点
2.通过LINQ:
var comments =
Set<QaComment>()
.Select(c => new QaComment() {/* assign every property once again and calc OverallVote */});
缺点:不喜欢再次分配allproperties 是否有更好的方法没有这种缺点?
更新
这是我想要的LINQ结果:
SELECT
qac.*,
(SELECT SUM(v.Value)
FROM QACommentVote v
WHERE v.QACommentID = qac.QACommentID) as OverallVote
FROM QAComment qac
答案 0 :(得分:1)
您可以将QaComment
和您要查找的总和作为匿名类型单独获取,并使用LINQ to Objects将它们合并到一个对象中:
var comments
= Set<QaComment>()
.Select(c => new { c, sum = c.Votes.Sum(v => v.Value))
.AsEnumerable() // to make next query execute as LINQ to Objects query
.Select(x => { x.c.OverallVote = x.sum; return x.c; })
.ToList();
但要明确指出:我没有测试过:)