2012-05-07 5 views
0

매일 고유 방문자 수를 보여주는 보고서가 필요합니다.LINQ를 사용하여 MVC에서 보고서 만들기

SELECT User.Name 
     ,Visit.VisitDate 
     ,COUNT(Visit.Id) AS NumOfVists 
FROM Visit JOIN User ON Visit.UserId = User.Id 
GROUP BY User.Name, Visit.VisitDate 

내가 사용자 (테이블) 모델과 코드를 먼저 사용하여 방문 (테이블) 모델을 만든 다음은 쿼리입니다. 또한이 두 모델 (테이블)을 참조하는 dbcontext 클래스가 있습니다. 내 컨트롤러에서이 쿼리의 결과를보기로 전달해야합니다.

우선이 레코드 집합의 MODEL을 만들어야합니까? 그렇다면 Name, VisitDate 및 NumOfVisits라는 3 개의 멤버로 된 say, REPORT라는 모델을 생성합니까?

이 경우 해당 쿼리의 LINQ 버전은 어떻게 생깁니 까? 보기에 어떻게 전달합니까?

+2

실제로이 문제를 직접 해결하지 않은 것처럼 보입니다. 당신이 우리에게 당신을 위해이 문제를 해결해달라고 요구하고 있지만, 나는 당신에게 의심의 이익을 줄 것이며 당신은 여전히 ​​MVC를 배우고 있다고 가정합니다. –

답변

0

조회 결과를 직접보기에 전달할 수 있습니다. 당신은 그것을 위해 여분의 것을 만들 필요는 없지만 원한다면 할 수 있습니다. 뷰 사용으로 전달하는 방법에 관해서는

return View(your model); 
+0

하지만 내 모델은 무엇입니까? 내 검색어의 결과는 어떤 유형입니까? 보기는 모델 만 허용하기 때문에 – ebeygin

+0

모델은 단지 객체 일뿐 특별한 것이 아닙니다. 쿼리 결과는 호출 방법에 따라 다릅니다. 그것은 데이터 셋, datareader, 익명 객체, 커스텀 객체에서 무엇이든 될 수 있습니다. 쿼리 결과를 받으면 다른 개체에 넣거나 뷰에 보낼 수 있습니다. 그것을하는 방법을 결정하는 것은 당신에게 달려 있습니다. 그것에 대한 단 하나의 대답은 없습니다. 쿼리를 실행하기 위해 작성한 LINQ 또는 ADO 코드를 게시하십시오. 그러면 귀하의 질문에 더 잘 답변 할 수 있습니다. –

1

그것은 정확한 스키마를 모른 채 말을 하드, 또는 어떻게 결과가 배열 될 싶지만 그의 LINQ 버전처럼 뭔가있을 거라고 생각 :

from u in User 
from v in u.Visit 
group v by new { u.Name, v.VisitDate } into g 
select new {g.Key.Name, g.Key.VisitDate, Count = g.Count()}; 

이렇게하면 x 세 회원들과 익명의 유형 인 IEnumerable<x> 결과, 줄 것이다 : 문자열, 날짜 시간 및 지능. 이 경우 ViewModel을 만들 필요는 없지만 다음과 같이 할 수 있습니다.

from u in User 
from v in u.Visit 
group v by new { u.Name, v.VisitDate } into g 
select new MyViewModel 
{ 
    Name = g.Key.Name, 
    VisitDate = g.Key.VisitDate, 
    Count = g.Count() 
}; 
+0

고마워,하지만 LINQ 표현의 처음 두 줄이 맞습니까? User와 Visit 모두 테이블입니다 ... 어떻게 u.Visit가 존재할 수 있습니까? 여기까지 내가 가지고있는 것은 .. 처음 두 줄에 대한 것입니다. 사용자의 u로부터 join v에서의 u.Id와 같음 v.UserId와의 j .. 어떻게 그룹화 부분과 연결합니까? – ebeygin

+0

@ebeygin - 그것이 내가 당신의 스키마에 달려 있다고 말하는 이유입니다. User 객체에 방문수 컬렉션이 포함 된 경우이 방법으로 수행해야합니다. 그렇지 않으면'u.Id가 v.UserId와 같음 '에서'join v로 두 번째 줄을 바꿉니다. –

+0

@ebeygin - 덧글 편집, 새로운 버전보기. –

관련 문제