не поддерживается перевод в sql ошибка? - PullRequest
1 голос
/ 20 февраля 2012

Я использую 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



    }

1 Ответ

3 голосов
/ 20 февраля 2012

Linq to sql должен переводить функции из .net в sql. Не все функции .net имеют эквивалент в sql, а те, что вы написали, определенно его не имеют.

При этом вы можете реализовать свою функцию как хранимую процедуру и использовать ее в своем запросе linq.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...