我不知道应该怎么做,但我知道自己想做什么。
我有一个模特
Item
Id:Guid (PK)
Title:string
Votes:virtual ICollection<Vote>
function bool hasVoted(string UserId){ return VotesContainsUserId.Count() == 1;}
Vote
Id:Guid (PK)
UserId:string (FK)
ItemId:Guid (FK)
当我当前查询投票时,我将一个属性添加到我的代码优先模型hasVoted,这是一个带有参数的非映射函数:UserId。
为此,必须加载所有投票,当呈现视图时,它会通过循环所有获取的值来检查用户是否有投票。
我想减少查询负载,我只能通过加载“hasVoted”函数来完成,而不用.Include(“Votes”)函数加载所有投票。
有没有办法做到这一点或其他方式来减少我的查询负载?
PS。为了学习关于lambda的东西,我对编写SQL查询不感兴趣。
答案 0 :(得分:0)
public bool hasVoted(string userId) {
return this.Votes.Any(vote => vote.UserId == userId);
}
此查询测试是否有来自特定用户的投票,但它对您没有帮助。当您访问Votes
集合时,将自动加载所有项目,并在内存中执行查询。
如果您不想将投票加载到内存中,则需要使用DbContext
类来运行查询。
public bool hasVoted(string userId, DbContext ctx) {
return ctx.Entry<Item>(this)
.Collection(o => o.Votes)
.Query()
.Any(vote => vote.UserID == userId);
}