使用IQueryable编译查询<;bool>;返回值

本文关键字:bool gt 返回值 IQueryable lt 查询 使用 编译 | 更新日期: 2023-09-27 18:00:57

我有一个帖子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个错误:

无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问权限声明。

无法隐式转换类型"System.Func<DatabaseDataContext,string,int[],System.Collections.Generic.IEnumerable>"到"System.Func<DatabaseDataContext,string,int[],System.Linq.IQueryable>'。存在显式转换(是否缺少强制转换?(

使用IQueryable编译查询<;bool>;返回值

如果要使用匿名类型,那么它的成员应该有一个名称。您缺少像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>()