2010-12-29 5 views
4

저는이 문제를 해결하는 가장 좋은 방법은 확실하지 않습니다. LINQ 쿼리만으로도 충분하지만 여기서는 가장 효율적인 방법을 찾고 있습니다.LINQ로 2 목록에 가입 하시겠습니까?

2 개의 테이블, 슬라이더 및 슬라이더 항목이 있습니다. SliderItems에는 Sliders ID를 가리키는 FK가 있습니다.

이 같은 특정 슬라이더에 대한 정보를 받고있다 :

public static List<Slider> GetSlider(Slider sItem) 
    { 
     DBContext db = new DBContext(); 

     if (sItem.Id != Guid.Empty) 
     { 
      var list = from tbl in db.Sliders 
         where tbl.Id == sItem.Id 
         orderby tbl.Id 
         select tbl; 

      return list.ToList(); 
     } 
    } 

그래서 난 내 홈 페이지를 위해해야 ​​할 일을 내가 데이터 목록에 물건을 할 데이터 세트를 철수입니다. 거기에 따라 Slider + SliderItems가 결합됩니다.

JOIN 문을 사용하여 일반 LINQ 쿼리를 수행하고 내 DataList로 돌아가는 일반 목록으로 던지기 만합니까?

어떤 생각이나 방향을 고맙게 생각합니다.

+0

당신이 제안하는 가입과 함께 linq를 게시 할 수 있습니까? 린치가 합리적인 쿼리를 제공한다면 대부분의 시간은 충분하다고 생각합니다. 또한, 귀하의 질문에있는 방법은 결국 하나의 수익이 부족합니다, 그것을 수정하십시오. – xandy

+0

@pixelmouse> http://stackoverflow.com/q/4408584/17447 이것이 원하는 것입니까? – naveen

답변

0

괜찮아 보이지만 질문을 ASP.Net으로 태그 지정했습니다. 내 질문은이 목록의 크기와이 페이지를 얼마나 자주 표시하고 있습니까?

자주 표시하고 너무 크지 않은 경우 슬라이더 테이블을 메모리로 가져온 다음 DB를 치지 않고 쿼리를 실행합니다.

사실 가능한 경우 전체 슬라이더와 슬라이더 항목을 캐시 할 수 있습니다.

앱에 가장 적합하다고 생각되면 가장 최근에 사용한 데이터를 캐싱해도 DB를 칠 필요없이 매우 단순한 부모/자식 관계로 보이는 것을 최적화하는 것보다 더 나은 퍼포먼스 증가를 얻을 수 있습니다. tbl.Id 아래에 데이터베이스의 색인이 있다고 가정합니까?

0

내가 Linq 쿼리를 조인과 함께 사용하고 데이터를 목록에 넣는 것이 좋습니다. 그것은 당신을 위해 잘 작동합니다.

1

데이터베이스는 이미 자리에 슬라이더와 SliderItems 사이의 외래 키 관계가있는 경우와 LINQ - 투 - SQL 모델은 모두 슬라이더와 SliderItems가 포함 된 경우, 다음 슬라이더 검색은 자동으로 모든 관련 SliderItems 검색 :

public static IEnumerable<SliderItems> GetSliderItems(Guid sliderId) 
{ 
    using (DataContext dc = new DataContext()) 
    { 
     Slider result = dc.Sliders.Single(s => s.Id == sliderId); 

     return result.SliderItems; 
    } 
}