2011-11-08 3 views
2

나는 결과를 생성하기 위해 데이터 테이블에서 Linq 쿼리를 실행하려고하는데, 사용자에 의해 필터링 된 다음 날짜로 필터링됩니다. 나는 Linq 101 예제 페이지 here에 중첩 된 Group By - Nested의 예제를 따르고있다.Linq to DataSet, 중첩 그룹?

그러나 제대로 작동하지 못했습니다. 몇 가지 오류가 발생했습니다. 누군가가 저에게 쿼리를 작성해 주거나 적어도 올바른 길을 찾을 수 있기를 바랍니다.

이것은 예제에서 작성한 현재 작동하지 않는 코드입니다.

var results = 
       from d in dataTableResults.AsEnumerable() 
       select new 
        { 
         d["DIMS User"], 
         DateGroup = 
          from o in d["Entry Date"] 
          group o by o["Entry Date"] into dg 
          select new { "Entry Date" = dg.Key, "DIMS user" = dg} 
        }; 

이 내 DataTable의 구조입니다 :)

한 익명의 무효 :

LogData.Columns.Add("System User", typeof(string)); 
LogData.Columns.Add("Host Name", typeof(string)); 
LogData.Columns.Add("DIMS User", typeof(string)); 
LogData.Columns.Add("Entry Details", typeof(string)); 
LogData.Columns.Add("Asset Name", typeof(string)); 
LogData.Columns.Add("Entry Date", typeof(string)); 
LogData.Columns.Add("Entry Time", typeof(string)); 

I 받고있어 오류가 있습니다 (날짜/시간 ShortDateToString/ShortTimetoString 구문 분석에서 별도입니다) 형식 멤버 선언자. 익명 형식 멤버 은 멤버 할당, 단순한 이름 또는 멤버 액세스로 선언해야합니다.

2) 소스 ' '의 '개체'에 대한 쿼리 패턴 구현을 찾을 수 없습니다. 'GroupBy'를 찾을 수 없습니다.

마지막으로, 내 게시물과 감사의 전진에 도움을 주셔서 감사합니다.

답변

3

당신은 문자열로 익명 형식의 속성 이름을 정의 할 수 없습니다 :

IEnumerable<Entry> dataList = from d in dataTableResults.AsEnumerable() 
           select new Entry 
           { 
            SystemUser=d["SystemUser"], 
            HostName=d["Host Name"], 
            DIMSUser=d["DIMS User"], 
            EntryDetails=d["Entry Details"], 
            AssetName=d["Asset Name"], 
            EntryDate=d["Entry Date"], 
            EntryTime=d["Entry Time"], 
           }; 

: 여기

internal class Entry 
{ 
    public string SystemUser { get; set; } 
    public string HostName { get; set; } 
    public string DIMSUser { get; set; } 
    public string EntryDetails { get; set; } 
    public string AssetName { get; set; } 
    public string EntryDate { get; set; } 
    public string EntryTime { get; set; } 
} 

internal class UserEntryPerDateInfo 
{ 
    public string DIMSUser { get; set; } 
    public string EntryDate { get; set; } 
    public IEnumerable<Entry> EntryList { get; set; } 
} 

당신이 당신의 데이터를 채 웁니다

나는 함께 당신의 정보를 얻기 위해 두 개의 클래스를 정의 그런 다음 날짜와 사용자별로 그룹화하여 다른 클래스에서 가져옵니다.

IEnumerable<UserEntryPerDateInfo> result = from a in dataList 
              group a by new {User = a.DIMSUser, EntryDate = a.EntryDate} 
              into grouped 
              select 
              new UserEntryPerDateInfo 
              { 
               DIMSUser = grouped.Key.User, 
               EntryDate = grouped.Key.EntryDate, 
               EntryList = grouped 
              }; 
+1

감사합니다. 작업에 훨씬 가깝습니다. 나는 여전히 "원본 유형 '개체'에 대한 쿼리 패턴의 구현을 찾을 수 없습니다. 'GroupBy'을 (를) 찾을 수 없습니다. 코드 조각 : o의 d [ "Entry Date"] – rreeves

+1

DateGroup에 무엇을 넣으시겠습니까? d [ "EntryDate"]에서 무엇을 얻습니까? –

+1

날짜는 모두 동일한 데이터 표에서 왔으며 사용자 및 날짜별로 그룹화해야합니다. – rreeves