2013-08-23 2 views
0

날짜 목록을 값으로 사용하여 사전을 작성하려고합니다.사전 목록 작성 (LINQ to SQL)

해결책을 얻으려면 inorder를 사용해야하는 확장 방법을 모르겠습니다. 값 필드에서 ToList()를 시도했지만 예외가 발생했습니다.

아래 코드는 제가 사용하고있는 코드입니다. 아래의 데이터

내가 나에게 모든 개별 제목의 인스턴스 (QA, 컨트롤러, 등.)과 그 발생을 줄 것이다 사전을 구축을 위해 노력하고
Date     Title 
2013-07-18 22:51:45.000 QA 
2013-07-18 22:52:30.000 Controller 
2013-07-18 22:52:30.000 Controller 
2013-07-18 22:58:00.000 Agent 
2013-07-18 23:07:00.000 QA 
2013-07-18 23:07:45.000 Controller 
2013-07-18 23:08:30.000 Planning 

(날짜 예를 들어

GolfitoDataContext db = new GolfitoDataContext(); 
    var dic = db.GetTable<History>() 
       .Select(p => new { p.Title, p.Date}) 
       .Where(x => x.Date >= startDateFilter && x.Date <= endDateFilter) 
       .DistinctBy(x => x.Title) 
       .AsEnumerable() 
       .ToDictionary(k => k.Title, k => k.Date); 

인스턴스가 발생한 위치).

var dic = db.GetTable<History>() 
      .Select(p => new { p.Title, p.Date}) 
      .Where(x => x.Date >= startDateFilter && x.Date <= endDateFilter) 
      .GroupBy(x => x.Title) 
      .ToDictionary(g => g.Key, g => g.Select(x => x.Date).ToList()); 
+1

에 의해 그룹을 사용하여이 작업을 수행 할 수 있습니다? –

답변

1

당신은 GroupBy 사용해야 구축

GolfitoDataContext db = new GolfitoDataContext(); 
var dic = db.GetTable<History>() 
      .Select(p => new { p.Title, p.Date}) 
      .Where(x => x.Date >= startDateFilter && x.Date <= endDateFilter) 
      .ToLookup(k => k.Title, k => k.Date); 

룩업는 기본적으로 멀티 맵과 동일하고, 사용할 수 있습니다 예 :

foreach(var date in dic[title]) 
{ 
    // ... 
} 
+0

당신의 코드를 시도했지만 운이 없었습니다. 오류 'g'의 보호 수준으로 인해 액세스 할 수 없습니다. 이것은 .ToDictionary (g => g.Key 다음에 발생합니다 .g.Select에서 빨간색 squibble입니다. – Navyseal

+0

oops ... g => g.Select가 수정되어야합니다 :) – Navyseal

+0

@Navyseal 네, 맞습니다. 이미 내 대답을 고쳤습니다. – MarcinJuraszek

1

ToLookup 방법은 것을 포함 : 기본적으로 Dictionary<string,List<DateTime>>

0

사전을 작성하기 전에 목록을 작성하십시오. 당신은`.DistinctBy (X => x.Title가)`, 우리가 아니, 제목마다 정확히 하나의 날짜를 기대한다 사용했습니다 때문에 당신은

var dic = (from x in db.GetTable<History>() 
      where x.Date >= startDateFilter && x.Date <= endDateFilter 
      group x.Date by x.Title) 
     .ToDictionary(grp => grp.Key, grp.ToList());