2010-12-20 6 views
0

기소 및 예약 번호의 복합 키에 따라 공식 id 인 rNI에 의해 잠재적 인 복수 행이있는 divAssignments가 있습니다.Linq 데이터 객체에서 count() 값 추출

rNI Booking Indictment 
12345 954445 10 12345 
12345 954445 10 12346 
12345 954445 10 12347 

그래서이 ID의 단일 예약 번호에 대해 ID의 개수는 3입니다.

나가 수와 예약 번호로 그룹을 생성하려고 길을 잃지 :

var moreThen = from dA in divAssignments 
    select new { dA.rNI, IndictmentCount = dA.indictmentNumber.Count() }; 

대부분의 예제가 다루고있는 정적 INT [] 내 경우에는 작동하지 않습니다.

그룹을 얻은 다음 수를 계산하려면 어떻게해야합니까? 환상적 일 것입니다. 은 T-SQL의 POV에서

나는 이것을 사용하십시오 :

Select rni, bookingNumber, count(*) IndictmentCount 
from divAssignments 
group by rni, bookingNumber 
having count(*) > 0 

TIA

답변

1

어떻게 이런 일에 대해 : 당신이 모두 그룹에 관심이 있다면

var query = from item in divAssignments 
group item by item.rNI into grouping 
select new 
{ 
    Id = grouping.Key, 
    Count = grouping.Count() 
} 

rNI와 예약 번호, 나는 이것을 다음과 같이 바꿀 것이다 :

var query = from item in divAssignements 
    group item by new { item.rNI, a.Booking } into grouping 
    select new 
    { 
     Id = grouping.Key, 
     Count = grouping.Count 
    }; 
,

또는

var query = from item in divAssignments 
    group item by item into grouping 
    select new 
    { 
     Id = grouping.Key, 
     Count = grouping.Count() 
    } 

와 평등 비교를 지원하기 위해 divAssignment 객체에 IEquatable를 구현합니다. 다른 옵션은 복합 키 비교를 수행하기 위해 IEqualityComparer 인스턴스를 작성하는 것입니다.

var query = 
    divAssignments 
     .GroupBy(i => i, new MyCustomEqualityComparer()) 
     .Select(i => new { Key = i.Key, Count = i.Count()); 
+0

음, 복합 키 부분을 보지 못했습니다. 답변 얻기. –

+0

당신은 거기에 간다. :) –

0
var query = 
    from dA in divAssignments 
    group dA by new { dA.rNI, dA.bookingNumber }; 

foreach(var grp in query) 
{ 
    Console.WriteLine("rNI={0}, bookingNumber={1} => Count={2}", grp.Key.rNI, grp.Key.bookingNumber, grp.Count()); 
} 
0

당신이 당신이 필요로 얻을 것이다 Linq에있는 Grouping operator를 사용하는 경우 : 같은 쿼리는 볼 수 있었다. 코드 :

var count = from a in divAssignments 
       group a by new { a.rNI, a.Booking } into b 
       select b; 

IGrouping 개체의 컬렉션을 반환합니다. 이렇게하면 키 (이 예제에서는 rNI 및 Booking 속성이있는 익명 형식이됩니다)와 키와 일치하는 divAssignments의 컬렉션이 제공됩니다.

0

방법 구문 (제 생각에 훨씬 더 쉽게 읽을 수) 사용 :

첫 번째 그룹 레코드를 다음 수를 포함하는 각 그룹에 대한 새로운 결과를 선택합니다.

var groups = divAssignments.GroupBy(d => new { d.rNI, d.Booking }); 
groups.Select(g=> new { g.Key.rNI, g.Key.Booking, IndictmentCount = g.Count() });