asp.net MVC + linq to Entity 간단한 강좌 (5) linq to Entity에서join의 사용 및 하위 조회

3738 단어 asp.netMVC
다중 테이블 검색은 우리가 sql 문장을 쓸 때 가장 자주 사용하는 방법이라고 할 수 있다.일반적으로 내연(join), 좌연(left join), 우연(right join) 방식을 채택한다.여기는 더 이상 말하지 않으니 틀림없이 모두도 다 알고 있을 것이다.여기서 내가 말하고자 하는 것은 linq to Entity 3.5에서 왼쪽 연결과 오른쪽 연결이 없고 단지 하나의join만 있을 뿐이다.그러니까 왼쪽이나 오른쪽을 하려면 다른 방법을 생각해야 돼.이것은 linq to Entity의 부족한 점일 수 있습니다. 자, 다음은 코드에서 살펴보겠습니다.
ql 문장에서 일반적인 간단한 연결은 다음과 같다.
      select stu.stu_name,k.parent_mob from ETrain_student as stu 
      join Etrain_stu_kinded as k 
      on stu.stu_id=k.stu_id 
      where stu_schoolcode='sjzsqz'

linq to Entity는 다음과 같이 씁니다.
4
     var stu_kind  = from stu in newEtrain.ETrain_student
                           join k in newEtrain.ETrain_stu_kinded on stu.stu_id equals k.stu_id
                           where stu.schoolcode == schoolcode                        
                          select new stu_kinded
                          {
                             stuName = stu.stu_name,
                             parentPhone = k.parent_mob
                          };
여기서 말하고자 하는 점은 온 뒤에 있는 "="호는 반드시 equals이고 stu는 앞에 있고 k는 뒤에 있고 바로 Join 앞에 있는 시계가 앞에 있어야 한다.순서는 바꿀 수 없다.
만약 우리 온 뒤의 조건이 두 개라면 어떻게 하겠는가, 사실은 매우 간단하다.아래와 같다
 
간단하지 않아요?허허....
다음은 저희가 한꺼번에 조회해 보겠습니다.제가 먼저 코드를 올릴게요. 여러분 보세요. 제가 말한 것보다 더 잘 알 수 있을 거예요.
var stu_kind  = from stu in newEtrain.ETrain_student
                           join k in newEtrain.ETrain_stu_kinded on new{stu.stu_id,stu.schoolcode} equals new{k.stu_id,k.schoolcode}
                           where stu.schoolcode == schoolcode                        
                          select new stu_kinded
                          {
                             stuName = stu.stu_name,
                             parentPhone = k.parent_mob
                          };

내가 더 이상 말할 필요가 없을 것 같아서, 모두들 서브 조회를 어떻게 처리했는지 알게 되었다.
덧붙여 말하자면, 내 위의 하위 조회의 예는 얻은 수치를 변수에 부여한 것이다. 그러나 만약 내가 문자열을 얻은 값이라면.어떡하지?사실은 똑같아요. 단지 select 뒤에 약간의 변화가 있을 뿐이에요.
만약 내가 한 학생의 성명을 얻으려고 한다면, 아래와 같이 쓴다.여기에 주의할 점은 제 개인적인 의견이기도 합니다.First Ordefault () 를 사용하지 않는 것이 좋습니다.First () 는 전자가 서열의 첫 번째 요소를 되돌려주기 때문입니다.시퀀스에 요소가 없으면 기본값을 반환합니다.이 기본값 하나만 있으면 매우 유용하다. 
/// 
        ///         
        /// 
        /// 
        /// 
        public ActionResult ClassRegNum(string id)
        {
            var info = from sc in newEtrain.ETrain_school_class
                       join grade in newEtrain.ETrain_grade on sc.grade_id equals grade.grade_id
                       where sc.schoolcode == id
                       orderby sc.grade_id, sc.class_id
                       select new ClassRegNum
                       {
                           grade_class = grade.grade_name + sc.class_Alias,
                           StudentNum = (from stu in newEtrain.ETrain_stu_class 
                 where stu.class_id == sc.class_id && stu.schoolcode == id && stu.grade_id == sc.grade_id select stu).Count(),
                           RegSum = (from stuc in newEtrain.ETrain_stu_class
                                     join k in newEtrain.ETrain_stu_kindred on stuc.stu_id equals k.stu_id
                                     join reg in newEtrain.reg_sms_user on k.parent_mobile equals reg.mobile_number
                                     where stuc.schoolcode == id && stuc.grade_id == sc.grade_id && stuc.class_id == sc.class_id && reg.reg_type == 1
                                     select stuc).Count()
                       };

            return View(info);
        }

이쯤에서 여러분들이 asp.net MVC + linq to Entity는 이미 간단한 이해를 가지고 있으며 일반적인 조작에 아무런 문제가 없습니다.

좋은 웹페이지 즐겨찾기