2017-12-18 1 views
0

일주일 동안 레코드 수를 반환하려고합니다. 내 코드는 레코드가있는 날의 레코드 만 반환하고, 해당 레코드가 삽입되지 않은 경우 0을 반환하고 싶습니다. 다음은 내 코드입니다.일요일에서 토요일까지 현재 주에 대해 하루에 행 수 반환 Entity Framework C#

// 원하는 결과 일요일 ~ 토요일 = [03510180], 현재 나는 [3,5,1,18] 만받습니다. // DateTime.Now.FirstDayOfWeek ()는주의 첫날을 반환하는 확장 메서드입니다. 도와 줘서 고마워.

var records = logs.Where(x=>x.date> DateTime.Now.FirstDayOfWeek()) 
      .GroupBy(x => x.date.Day) 
      .Select(x => 
       x.Any()?x.Count():0 
      ).ToArray(); 
+0

그렇게 만 표시 할을 일주일 - 월요일 - 화요일 ..... 일요일 – msoliman

+0

예, msoliman. 현재 월요일부터 일요일까지도 작동합니다. – Raj

+0

일주일로 제한하는 방법은 무엇입니까? – NetMage

답변

1

날짜 범위 만드는 또 다른 확장 방법을 사용하여 : 배열

public static IEnumerable<DateTime> Range(this DateTime startDate, int numberOfDays) => Enumerable.Range(0, numberOfDays).Select(e => startDate.AddDays(e)); 

날짜의 주와 함께 할 수 있습니다 GroupJoin를 만들 :

var recordgroups = logs.Where(x => x.date > DateTime.Now.FirstDayOfWeek()) 
      .GroupBy(x => x.date.Day); 
var records = DateTime.Now.FirstDayOfWeek().Range(7) 
        .GroupJoin(recordgroups, wd => wd.Day, lg => lg.Key, (_, lg) => lg.Any() ? lg.First().Count() : 0).ToArray(); 
1

나는 아래 단지 니펫이 솔루션은 작동 잘 모르겠지만, 그냥에게, 단순히 당신이 왼쪽으로 할 수있는 외부 정적 목록에 가입을 시도해 (의사 코드)를 수행하는 방법.

List<String> weekdays = new List<String>(); 
weekdays.Add("Monday"); 
weekdays.Add("Tuesday"); 
... 
... 
... 
//Left outer join to display forcibly all weekdays and join them with your log's data and continue to grouping. 


var result = from w in weekdays 
join l in logs into joined 
from j in joined.DefaultIfEmpty() 

작동하지 않은 경우 당신이 그것을 실행할 수 :) 작동하지 않은 경우

는이을 확인하기 위해 내가이 결과를 반환 한 후, 또 다른 솔루션을했습니다으로 댓글을 남겨주세요 결과 (레코드)을 사용하여 정적 데이터 (평일)를 왼쪽으로 연결하면 데이터에없는 데이터 (0보다 큰 데이터) 만 반환한다는 것을 의미하므로 데이터가 전혀없는 레코드 만 반환해야합니다. 조인 후에 0이 될 것입니다.

var result = from w in weekdays 
join l in records into joined 
from j in joined.DefaultIfEmpty() 
1

당신은 ListDbSet에 가입 할 수 있기 때문에 Linq에 엔티티에 SQL 언어에 List을 변환 할 수 없습니다. 그래서 빈 날을 루프로 채우는 것 외에는 옵션이없는 것 같습니다.

var records = logs 
    .GroupBy(x => SqlFunctions.DatePart("dw", x.date)) 
    .Select(x => 
     new WeekCounts 
     { 
      Day = x.Key, 
      Count = x.Count() 
     }).ToList(); 

for (int i = 0; i < 7; i++) 
{ 
    if (records.All(x => x.Day != i)) 
    { 
     records.Add(new WeekCounts { Day = i, Count = 0 }); 
    } 
} 

public class WeekCounts 
{ 
    public int? Day; 
    public int Count; 
} 
관련 문제