没有支持的sql转换错误

本文关键字:转换 错误 sql 支持 | 更新日期: 2023-09-27 18:25:19

我正在使用linq来sql。我正在运行一个查询,该查询使用一个函数来返回正确的记录。我正在使用一个函数,这样我就可以使用if语句,但我不知道如何在linq子句中使用它。代码复制如下。它返回一个错误:"GetPageOwner(int 32)不支持转换为sql"我做错了什么?如何修复它以获得相同的结果?

   return (from page select new Result
        {
            pageOwner = GetPageOwner(page.page_id)
        });

    public Post GetPageOwner(int pageid)
    {
        var posts = (from dp in db.Posts where dp.pageid == pageid select dp);
        var returned = posts;
        if (posts.Count() > 0)
        {
            var latest = posts.OrderByDescending(o => o.Date).FirstOrDefault();
            var sharedsamedayaslatest = (from p in posts where p.Date.AddDays(1) >= latest.Date select p);
            if (sharedsamedayaslatest.Count() > 1)
            {
                var followedpost = (from p in posts from s in db.Subscriptions where s.Subscriber == UID && s.Subscribedto == p.UserId select p);
                var count = followedpost.Count();
                if (count == 1)
                {
                    returned = followedpost;
                }
                else if (count > 1)
                {
                    returned = (from s in followedpost let reposts = GetPostReposts(s.id) let rating = GetPostRating(s.id) let score = reposts + rating orderby score descending select s);
                }
                else
                { 
                    //no follower shared this post so return the most liked
                    returned = (from s in sharedsamedayaslatest let reposts = GetPostReposts(s.id) let rating = GetPostRating(s.id) let score = reposts + rating orderby score descending select s);
                }
            }
            else
            {
                //no shares on the day the latest share
                returned = sharedsamedayaslatest;
            }
        }
        else
        {
            //only one post
            returned = posts;
        }

        return returned.FirstOrDefault(); //order by userid gets a random one

    }

没有支持的sql转换错误

Linq-to-sql必须将函数从.net转换为sql。并不是所有的.net函数都有sql中的等价函数,而您编写的函数肯定没有。

也就是说,您可以将函数实现为存储过程,并在linq查询中使用它。