使用IQueryable <bool>返回值

时间:2015-07-04 07:05:56

标签: c# linq

我有一个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 ;.存在显式转换(您是否错过了演员?)

1 个答案:

答案 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>()