C# 不支持转换为sql错误?

C# 不支持转换为sql错误?,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,我正在使用LINQtoSQL。我正在运行一个使用函数返回正确记录的查询。我使用的是一个函数,所以我可以使用if语句,我不知道如何在linq子句中使用它。代码复制如下。它返回一个错误:“GetPageOwner(Int32)没有支持的sql转换”我做错了什么?如何修复它以获得相同的结果 return (from page select new Result { pageOwner = GetPageOwner(page.page_id)

我正在使用LINQtoSQL。我正在运行一个使用函数返回正确记录的查询。我使用的是一个函数,所以我可以使用if语句,我不知道如何在linq子句中使用它。代码复制如下。它返回一个错误:“GetPageOwner(Int32)没有支持的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



    }

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


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

投票关闭-精确到回答的另一个问题的两倍。Pavel在第一条评论中提供了链接。在返回部分之前,您还有其他内容吗?@RoboLover您是什么意思?代码正是上面提供的,也许我可以在linq中重新编写if语句?有没有办法在linq中编写if语句?如何解决这个问题?有没有一种方法可以使用c#执行存储过程?我对实际的sql知之甚少。有一种方法可以将c#与sql集成,但我认为这是个坏主意。如果您不懂sql,请将任务委托给懂sql的人。如果不能做到这一点,可以从查询中提取函数,并在foreach循环中运行它,这会起作用。唯一的问题是你会有x+1点击到数据库,而不是只有1。我不能在foreach中运行它,因为它在很多行上,并且会消耗很多内存。你知道如何用linq写if语句吗?这将解决问题,因为我不需要该函数。