2010-05-28 4 views
3

을 개수 :LINQ - 투 - SQL - 가입, 내가 쿼리 다음 한

var result = (
      from role in db.Roles 
      join user in db.Users on role.RoleID equals user.RoleID       
      where 
       user.CreatedByUserID == userID        
      orderby user.FirstName ascending 
      select new UserViewModel 
      { 
       UserID = user.UserID, 
       PhotoID = user.PhotoID.ToString(), 
       FirstName = user.FirstName, 
       LastName = user.LastName, 
       FullName = user.FirstName + " " + user.LastName, 
       Email = user.Email, 
       PhoneNumber = user.Phone, 
       AccessLevel = role.Name 
      }); 

지금, 나는이 쿼리를 수정해야 ... 내가 가진 다른 테이블은 테이블 상품입니다. 지난 달과 지난 해 생성 한 거래 수를 계산하고 싶습니다. 나는 이와 같은 것을 시도했다 :

var result = (
      from role in db.Roles 
      join user in db.Users on role.RoleID equals user.RoleID 
      //join dealsYear in db.Deals on date.Year equals dealsYear.DateCreated.Year 
      join dealsYear in 
       (
         from deal in db.Deals 
         group deal by deal.DateCreated into d 
         select new { DateCreated = d.Key, dealsCount = d.Count() } 
       ) on date.Year equals dealsYear.DateCreated.Year into dYear 
      join dealsMonth in 
       (
         from deal in db.Deals 
         group deal by deal.DateCreated into d 
         select new { DateCreated = d.Key, dealsCount = d.Count() } 
       ) on date.Month equals dealsMonth.DateCreated.Month into dMonth 
      where 
       user.CreatedByUserID == userID     
      orderby user.FirstName ascending 
      select new UserViewModel 
      { 
       UserID = user.UserID, 
       PhotoID = user.PhotoID.ToString(), 
       FirstName = user.FirstName, 
       LastName = user.LastName, 
       FullName = user.FirstName + " " + user.LastName, 
       Email = user.Email, 
       PhoneNumber = user.Phone, 
       AccessLevel = role.Name, 
       DealsThisYear = dYear, 
       DealsThisMonth = dMonth 
      }); 

그러나 여기의 문법은 정확하지 않다. 아이디어가 있으십니까?

Btw, 예제와 함께 LINQ to SQL의 유용한 책이 있습니까?

+0

같이 쿼리를 작성할 수 싶다면? –

+0

"DealsThisYear = dYear"가 올바르지 않습니다 (구문). –

답변

3

내가 솔루션 here 찾을 생각 : 오류가 발생하는 것을 의미 "올바른에도 구문 아니다"

var result = (
      from role in db.Roles 
      join user in db.Users on role.RoleID equals user.RoleID 
      join deal in db.Deals on user.UserID equals deal.SalesAgentID into deals     
      where 
       user.CreatedByUserID == userID 
      orderby user.FirstName ascending 
      select new UserViewModel 
      { 
       UserID = user.UserID, 
       PhotoID = user.PhotoID.ToString(), 
       FirstName = user.FirstName, 
       LastName = user.LastName, 
       FullName = user.FirstName + " " + user.LastName, 
       Email = user.Email, 
       PhoneNumber = user.Phone, 
       AccessLevel = role.Name, 
       DealsThisYear = deals.Where(deal => deal.DateCreated.Year == date.Year).Count() 
      }); 
2

당신이 create an association, 당신은

IQueryable<UserViewModel> result = 
    from user in db.Users 
    where user.CreatedByUserID == userID 
    orderby user.FirstName ascending 
    select new UserViewModel 
    { 
    UserID = user.UserID, 
    PhotoID = user.PhotoID.ToString(), 
    FirstName = user.FirstName, 
    LastName = user.LastName, 
    FullName = user.FirstName + " " + user.LastName, 
    Email = user.Email, 
    PhoneNumber = user.Phone, 
    AccessLevel = user.Role.Name, 
    DealsThisYear = user.Deals 
     .Where(deal => deal.DateCreated.Year == date.Year).Count() 
    });