我有一个Post ID列表,我试图为每个帖子返回当前用户的投票状态(如果用户已投票支持该帖子,则为true;如果没有,则为false)。对我来说,每件事情似乎都没问题,但我有两个错误。
public static Func<DatabaseDataContext, string, int[], IQueryable<bool>>
GetUserVoted = CompiledQuery.Compile((DatabaseDataContext db, string UserId, int[] PostIds)
=> (from p in PostIds
select new
{
db.Votes.Any(v=> v.PostId==p && v.UserId == UserId)
})
);
我得到2个错误:
无效的匿名类型成员声明符。必须使用成员分配,简单名称或成员访问声明匿名类型成员。
和
无法隐式转换类型&#39; System.Func&lt; DatabaseDataContext,字符串,整数[],System.Collections.Generic.IEnumerable&GT;&#39;到&#39; System.Func&lt; DatabaseDataContext,串,INT [],System.Linq.IQueryable&GT;&#39 ;.存在显式转换(您是否错过了演员?)
答案 0 :(得分:1)
如果您要使用匿名类型,则其成员应具有名称。您错过了HasAnyVote
:
select new
{
HasAnyVote = db.Votes.Any(v=> v.PostId==p && v.UserId == UserId)
})
或直接使用:
(from p in PostIds
select db.Votes.Any(v=> v.PostId==p && v.UserId == UserId))
.AsQueryable<bool>()