2012-02-20 2 views
1

나는 linq을 SQL에 사용하고있다. 올바른 레코드를 반환하는 함수를 사용하는 쿼리를 실행하고 있습니다. linq 절 내에서 수행하는 방법을 모르는 if 문을 사용할 수 있도록 함수를 사용하고 있습니다. 코드가 아래에 복사됩니다. 오류를 반환합니다 : "GetPageOwner (int 32) SQL에 대한 지원되는 변환이 없습니다"무엇을 잘못하고 있습니까? 동일한 결과를 얻으려면 어떻게 수정해야합니까? 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에는 SQL로 .NET에서 기능을 번역 할 수 있습니다. 모든 .net 함수가 sql에 상응하는 함수를 가지고있는 것은 아니며, 여러분이 작성한 함수는 확실히 가지고 있지 않습니다.

그렇다면 저장 프로 시저로 함수를 구현하고 linq 쿼리에서 사용할 수 있다고합니다.

+0

어떻게 해결할 수 있습니까? C#을 사용하여 저장 프로 시저를 수행하는 방법이 있습니까? 나는 실제 SQL에 대한 지식이 거의 없다. –

+0

SQL과 C#을 통합하는 방법이 있지만 생각이 나쁜 것 같다. SQL을 모르는 경우 작업을 수행하는 사람에게 작업을 위임하십시오. 그렇게 할 수 없다면 쿼리에서 함수를 추출하여 foreach 루프에서 실행하면됩니다. 유일한 문제는 단지 1 대신 DB에 x + 1 히트가 될 것입니다. – linkerro

+0

많은 행이 있고 많은 메모리를 소비하기 때문에 foreach에서 실행할 수 없습니다. linq에 if 문을 쓰는 방법을 알고 있습니까? 이 기능을 필요로하지 않기 때문에이 문제를 해결할 수 있습니다. –

관련 문제