2012-04-13 2 views
0

테이블의 모든 데이터를 그룹화하고 검색하려고합니다. 나는 아직도 Linq에 대해 처음이고, 내가 뭘 잘못하고 있는지 말할 수 없다. 결과를 그룹화 할뿐만 아니라 테이블의 모든 열을 검색하려고합니다. 이것이 가능한가? 전체 결과보기 linq 그룹화 쿼리

(from r in db.Form 
    orderby r.CreatedDate descending 
    group r by r.Record into myGroup 
    where myGroup.Count() > 0 
    where (r.CreatedDate > lastmonth) 
    where r.Name == "Test Name" 
    select new { r, myGroup.Key, Count = myGroup.Count() } 
    ) 

일부 "R"은 그것을 어떻게 "R"은 문맥을 잃거나 내가 그룹화 이후를 대체되었습니다. 확실하지 않다.

답변

1

당신은 당신이 원하는 것을 달성하기 위해 두 단계로 작업을 분할해야합니다.

그룹 데이터를 그룹화 된 데이터에서

var groupedData = db.Form.Where(item=>item.CreatedDate > lastMonth && item.Name == "Test Name") 
        .OrderByDescending(item=>item.item.CreatedDate) 
        .GroupBy(item=>item.Record) 
        .Select(group => new {Groups = group, Key = group.Key, Count = group.Count()}) 
        .Where(item => item.Groups.Any()); 

Form 요소

var formElements = groupedData.SelectMany(g => g.Groups).ToList(); 
+0

감사합니다 @RePierre는 매력처럼 작동했습니다! –

0

개별 레코드를 필터링하고 있기 때문에, 후보다는 그룹화하기 전에 필터링해야합니다

(
    from r in db.Form 
    where r.CreatedDate > lastMonth) 
    where r.Name == "Test Name" 
    orderby r.CreatedDate descending 
    group r by r.Record into myGroup 
    where myGroup.Count() > 0 
    select new { Groups = myGroup, myGroup.Key, Count = myGroup.Count() } 
) 
// Groups is a collection of db.Form instances 
+0

잡았다을 선택, 그래서 나는 그 조각을 시도하고 지금은 예외가. "select"문 아래에 오류가 표시됩니다. 형식 'System.Linq.IQueryable '을 'System.Collections.Generic.List '으로 암시 적으로 변환 할 수 없습니다. 명시 적 변환이 존재합니다 (캐스트가 누락 되었습니까?) –

+1

@JasonFoglia는 쿼리로 수행중인 작업을 보여줍니다. 또한'.Count()> 0'보다는'.Any()'를 사용하는 것이 더 좋습니다. – phoog

+0

@JasonFoglia 더 자세히 살펴보면, 쿼리의 결과를'List

'에 할당한다고 가정합니다. 당신이 알았 듯이 그건 효과가 없습니다. 이 대신에 시도해보십시오 :'var list = (from db.Form ... select new {...}) .ToList();' – phoog