2011-04-27 2 views
2

코드로 linq2sql 그룹을 작성하는 더 좋은 방법이 있습니까? T-SQL 버전과 비교해 보면 너무 길어서 성능 문제가있는 것 같습니다. 난 당신이 외부 필요하다고 생각하지 않습니다이 Linq SQL 그룹에 대한 더 나은 방법이 있습니까

var Result = (
    // [ 1. JOIN 
    from l in db.Lists 
    where l.ProfileID == ID 
    join item in db.Items on l.ID equals item.ListID into ListItem 
    //orderby l.CreateDate descending 
    // ] 

    // [ 2. JOIN - 1. GROUPBY 
    from l_item in ListItem.DefaultIfEmpty() // left join için 
    group l_item by new { 
     l.CategoryID, 
     l.CreateDate, 
     l.Header, 
     Min_ItemListID = ListItem.Min(c=>c.ListID) 
    } into G_List 
    join i_photo in db.ItemPhotos on G_List.Key.Min_ItemListID equals i_photo.ItemID into ListItem2 
    // ] 

    // [ 2. GROUPBY 
    from ll_item in ListItem2.DefaultIfEmpty() 
    group ll_item by new { 
     G_List.Key.CategoryID, 
     G_List.Key.CreateDate, 
     G_List.Key.Header, 
     G_List.Key.Min_ItemListID, 
     Min_ItemPhoto_FileName = ListItem2.Min(c=>c.FileName) 
    } into GG_List 
    // ] 

    select new TList.General_ListViewModel 
    { 
     CategoryID = GG_List.Key.CategoryID, 
     CreateDate = GG_List.Key.CreateDate, 
     Header = GG_List.Key.Header, 
     FirstImageURL = GG_List.Key.Min_ItemPhoto_FileName 
    } 
); 
+0

당신이 직접 쓰려고 시도해 본 다음에 붙어있을 때 도움을 요청하는 것이 좋을 것이다. – Nix

+1

나는 이것을 위해 linq을 사용하지 말 것을 권한다. 대신 저장 프로 시저 또는 뷰를 작성하고 그 작업을 완료하십시오. – jeroenh

+0

절대적으로 필요하지 않으면 다소 반대합니다. SP로 푸시하지 않을 것입니다. – Nix

답변

3

이미 (join ... into를 가짐으로써) 그룹에 가입하여 그룹화 모든 것을 가지고, 부품을 가입 할 수 있습니다. 나는 당신이이 질의를 다음과 같이 줄일 수 있다고 믿는다 :

var query = 
    from list in db.Lists 
    where list.ProfileID == ID 

    join item in db.Items on list.ID equals item.ListID into listItems 
    //orderby list.CreateDate descending 

    join photo in db.ItemPhotos 
     on listItems.Min(c=>c.ListID) equals photo.ItemID into listPhotos 

    select new TList.General_ListViewModel 
    { 
     CategoryID = list.CategoryID, 
     CreateDate = list.CreateDate, 
     Header = list.Header, 
     FirstImageURL = listPhotos.Min(c=>c.FileName), 
    }; 
+0

네가 맞아, 잘된 것 같아. 감사! –

관련 문제