2010-05-31 3 views
2

저는 LINQ를 처음 사용했기 때문에 일부 쿼리에서 어려움을 겪고 있으므로 매우 간단합니다. 어쨌든, 나는 잠시 동안 이것에 반대하는 내 머리를 때 리고 있었지만 나는 혼란 스럽다.도움말 T-SQL 쿼리를 LINQ 쿼리로 변환

이 T-SQL 쿼리를 LINQ 쿼리로 변환하는 데 도움이되는 사람이 있습니까? 나는 그것을 수행하는 방법을 참조하면, 내가 구문에 대한 몇 가지 질문을해야합니다 확신 :

SELECT BlogTitle 
FROM Blogs b 
JOIN BlogComments bc ON 
    b.BlogID = bc.BlogID 
WHERE b.Deleted = 0 
    AND b.Draft = 0 
    AND b.[Default] = 0 
    AND bc.Deleted = 0 
GROUP BY BlogTitle 
ORDER BY MAX([bc].[Timestamp]) DESC 

그냥 내가 내 자신이 문제를 해결하려고 노력 있음을 보여주기를, 여기에 내가 '무엇인가 했습니다는 ... 나는 경우에이 다른 누군가를 위해 도움이 될 것입니다, 나는 그것을 밖으로 일을 생각 ...

var iqueryable = 
    from blog in db.Blogs 
    join blogComment in db.BlogComments on 
     blog.BlogID equals blogComment.BlogID 
    where blog.Deleted == false 
     && blog.Draft == false 
     && blog.Default == false 
     && blogComment.Deleted == false 
    group blogComment by blog.BlogID into blogGroup 
    orderby blogGroup.Max(blogComment => blogComment.Timestamp) 
    select blogGroup; 

답변

1
from b in db.Blogs 
where !b.Deleted 
    && !b.Draft 
    && !b.Default 
    && !b.Deleted 
order by b.BlogComments.Max(bc => bc.Timestamp) descending 
select new {Blog = b, Count = b.BlogComments.Count()} 

, 당신은 당신의 RecentlyCommentedBlog 같은 클래스로 투영해야합니다. 익명 클래스 (내 쿼리가 보여주는 것)는 메서드에서 반환 형식으로 명명되지 않습니다.

블로그 클래스에 BlogComments 속성이없는 경우 create an association입니다.

+0

감사합니다. David. 내가 제안한대로 BlogComments 속성을 내 Blog partial 클래스에 추가하여이 문제를 해결하기로 결정했습니다. – campbelt

1

를 컴파일 혼자 일을하지 않지만, 지금까지 가지고 올

var iQueryable = 
from blog in db.Blogs 
join blogComment in db.BlogComments on 
    blog.BlogID equals blogComment.BlogID 
where blog.Deleted == false 
    && blog.Draft == false 
    && blog.Default == false 
    && blogComment.Deleted == false 
group blogComment by blog.BlogTitle into blogGroup 
let maxTimeStamp = blogGroup.Max(blogComment => blogComment.Timestamp) 
let commentCount = blogGroup.Count() 
orderby maxTimeStamp descending 
select new RecentlyCommentedBlog() { BlogTitle = blogGroup.Key, CommentCount = commentCount }; 

시도 중입니다. 이 쿼리의 결과를 IQueryable 개체로 반환합니다. RecentCommentedBlog라는이 쿼리에 대해서만 새로운 클래스를 만들지 않고서는 그렇게 할 수 없었습니다. 여기에 그 클래스의 코드는 다음과 같습니다 어쨌든

public class RecentlyCommentedBlog 
{ 
    public string BlogTitle { get; set; } 
    public int CommentCount { get; set; } 

    public RecentlyCommentedBlog() { } 

    public RecentlyCommentedBlog(string blogTitle, int commentCount) 
    { 
     BlogTitle = blogTitle; 
     CommentCount = commentCount; 
    } 
} 

,이 솔루션이 작동하는 것 같군 동안, 나는 도움이되지만이 달성 한 더 나은 방법이 될 수 있는지가 생각할 수 없다. 당신이 IQueryable<T>을 반환하려면