2013-06-28 3 views
1

아래 데이터가 포함 된 데이터 테이블이 있습니다. 코드, 이름, 지역 및 월별로 그룹화하려는 경우 다음 LINQ를 사용하여 covcode = (ip 또는 OP)를 매달 계산하십시오.Datatable Linq GroupBy, 집계 수

Code Name    Region  Month CovCode 
6018 Provider - ONE  REGION2  1 OP 
6018 Provider - ONE  REGION2  1 IP 
6019 Provider - TWO  REGION3  2 OP 
6019 Provider - TWO  REGION3  2 IP 
6020 Provider - THREE REGION4  3 IP 
6020 Provider - THREE REGION4  3 IP 
6020 Provider - THREE REGION4  3 OP 

내가 이런 식으로해야 원하는 결과 :

Code Name    Region  MONTH1 IP OP MONTH2 IP OP MONTH3 IP OP 
6018 Provider - ONE  REGION2  2 1 1  0 0 0  0 0 0 
6019 Provider - TWO  REGION3  0 0 0  2 1 1  0 0 0 
6020 Provider - THREE REGION4  0 0 0  0 0 0  3 2 1 

이 내가 잘못된 결과를 반환하는 데 사용되는 LINQ이다.

var hospital = 
    from hosp in tblClaimsMain.AsEnumerable()   
    group hosp by hosp["ProviderCode"] into grp 
    select new 
    { 
      ProviderCode = grp.Select(g => g["CODE"].ToString()).FirstOrDefault(), 
     ProviderName = grp.Select(g => g["NAME"].ToString()).FirstOrDefault(), 
     Region = grp.Select(g => g["REGION"].ToString()).FirstOrDefault(), 
      MONTH1 = grp.Select(g => g["MONTH"].ToString() == "1").Count(), 
      MONTH2 = grp.Select(g => g["MONTH"].ToString() == "2").Count(), 
      MONTH3 = grp.Select(g => g["MONTH"].ToString() == "3").Count() 

    }; 

편집 :

안녕, 나는 반면에, 한 달에 수를 얻을 이제 수, 난 아직 covcode 한달 카운트를 얻는 문제가있다. 나는 아래 linq를 사용. 이 같은

var hospital = 
from hosp in tblClaimsMain.AsEnumerable()   
group hosp by new{CODE=hosp["CODE"],NAME=hosp["NAME"],REGION=hosp["REGION"]} into grp 
select new 
{ 
     ProviderCode = grp.Key.CODE, 
     ProviderName = grp.Key.NAME, 
     Region = grp.Key.REGION, 
     MONTH1 = grp.Count(g => g["MONTH"].ToString() == "1"), 
     IP1 = grp.Count(g => g["COVCODE"].ToString() == "INPATIENT"), 
     OP1 = grp.Count(g => g["COVCODE"].ToString() != "INPATIENT"), 
     MONTH2 = grp.Count(g => g["MONTH"].ToString() == "2"), 
     IP2 = grp.Count(g => g["COVCODE"].ToString() == "INPATIENT"), 
     OP2 = grp.Count(g => g["COVCODE"].ToString() != "INPATIENT"), 
     MONTH3 = grp.Count(g => g["MONTH"].ToString() == "3") 
     IP3 = grp.Count(g => g["COVCODE"].ToString() == "INPATIENT"), 
     OP3 = grp.Count(g => g["COVCODE"].ToString() != "INPATIENT"), 
}; 

답변

0

시도 :

var hospital = 
    from hosp in tblClaimsMain.AsEnumerable()   
    group hosp by new{CODE=hosp["CODE"],NAME=hosp["NAME"],REGION=hosp["REGION"]} into grp 
    select new 
    { 
      ProviderCode = grp.Key.CODE, 
      ProviderName = grp.Key.NAME, 
      Region = grp.Key.REGION, 
      MONTH1 = grp.Count(g => g["MONTH"].ToString() == "1"), 
      IP1 = grp.Count(g =>g["MONTH"].ToString() == "1" && g["COVCODE"].ToString() == "IP"), 
      OP1 = grp.Count(g =>g["MONTH"].ToString() == "1"&& g["COVCODE"].ToString() == "OP"), 
      MONTH2 = grp.Count(g => g["MONTH"].ToString() == "2"), 
      IP2 = grp.Count(g =>g["MONTH"].ToString() == "2" && g["COVCODE"].ToString() == "IP"), 
      OP2 = grp.Count(g =>g["MONTH"].ToString() == "2"&& g["COVCODE"].ToString() == "OP"), 
      MONTH3 = grp.Count(g => g["MONTH"].ToString() == "3"), 
      IP3 = grp.Count(g =>g["MONTH"].ToString() == "3" && g["COVCODE"].ToString() == "IP"), 
      OP3 = grp.Count(g =>g["MONTH"].ToString() == "3" && g["COVCODE"].ToString() == "OP") 
    }; 
+0

안녕하세요 팀, 당신의 대답은, 그러나 위의 샘플 제공, 나에게 많은 도움이됩니다. – Vhinchies

+0

내 코드를 업데이트하면 도움을 줄 수 있기를 바랍니다 :) –

+0

신속한 대응을 부탁드립니다. 나는 그것을 지금 시도 할 것이다. – Vhinchies

-1

Спасибо! Работает! 내가 달 covcode (IP, OP) 결과가 정확 당 수를 얻을 때

 var queryZakaz = (
       from table in dtZakaz.AsEnumerable() 
       group table by table.Field<decimal>("DOCID") into g //группировка по DOCID 
       select new 
       { 
        DOCID=g.Key, 
        SUPPLIER_ID = g.Select(table => table["SUPPLIER_ID"].ToString()).FirstOrDefault(), 
        totalCountZakazBEZ_NDS=Convert.ToDecimal(g.Where(table => table.Field<decimal>("TAXID") == 1).Count()), 
        totalCountZakazNDS = Convert.ToDecimal(g.Where(table => table.Field<decimal>("TAXID") == 2).Count()), 
        totalSumZakazBEZ_NDS=g.Where(table => table.Field<decimal>("TAXID") == 1).Sum(table => table.Field<decimal>("PRICE1")), 
        totalSumZakazNDS = g.Where(table => table.Field<decimal>("TAXID") == 2).Sum(table => table.Field<decimal>("PRICE1")) 
       }); 
+0

pls 대답은 영어로 –