2012-02-20 20 views
1

私はlinqをSQLに使用しています。私は正しいレコードを返す関数を使用するクエリを実行しています。私は関数を使用しているので、linq節の中でそれを行う方法を知らないif文を使用できます。コードは下にコピーされます。 "GetPageOwner(int 32)にはSQLへのサポートされていない変換がありません"何が間違っていますか?どのように同じ結果を得るためにそれを修正するには?サポートされている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

http://stackoverflow.com/questions/332670/simple-linq-to-sql-has-no-support-translation-to-sql –

+0

閉じるように投票する - 正確な倍精度の別の質問に回答しました。 Pavelは最初のコメントでリンクを提供しました。 – TomTom

+0

リターン部分の前に他のものがありますか? – Bastardo

答えて

3

Linq to sqlは、関数を.netからsqlに変換する必要があります。すべての.net関数がsqlに同等の機能を持っているわけではなく、あなたが書いた関数はまったく持っていません。

あなたの関数をストアドプロシージャとして実装し、linqクエリで使用できると言われています。

+0

どうすればこの問題を解決できますか? C#を使用してストアドプロシージャを実行する方法はありますか?私は実際のSQLの知識はほとんどありません。 –

+0

SQLとC#を統合する方法がありますが、それは悪い考えです。あなたが誰かにタスクを委任するSQLを知らない場合。あなたがそれを行うことができない場合は、クエリから関数を抽出し、それが動作するforeachループで実行することができます。唯一の問題は、ちょうど1ではなくdbにx + 1のヒットがあることです。 – linkerro

+0

多くの行に多くのメモリを消費するため、foreachで実行できません。 linqでif文を書く方法を知っていますか?私はこの機能を必要としないので、これで問題は解決します。 –

関連する問題