2014-02-27 2 views
-1

Ниже мой DataTable:Расчет суммы дней в LINQ запрос

ResourceName ContentName ProjectName PlanndStartDate PlannedEndDate ActualStartDate ActualEndDate DesiredDate 
ANIL   C-1479.doc  HP_WI_4141 2/24/2014  2/25/2014  2/24/2014   2/24/2014 2/23/2014 
ANIL   C-1234.docx HP_WI_3131 2/1/2014  2/12/2014  2/1/2014   2/13/2014 2/11/2014 
CHETNA   C-1479.doc  HP_WI_4141 2/24/2014  2/25/2014  2/24/2014   2/24/2014 2/26/2014 
CHETNA   C-1479.doc  HP_WI_4141 2/1/2014  2/12/2014  2/1/2014   2/13/2014 2/10/2014 
CHETNA   C-14085.xlsx HP_WI_5151 2/14/2014  2/28/2014  2/14/2014   2/26/2014 2/26/2014 
GAURAV YADAV C-1479.doc  HP_WI_4141 2/24/2014  2/25/2014  2/24/2014   2/24/2014 2/25/2014 
GAURAV YADAV C-1479.doc  HP_WI_4141 2/1/2014  2/12/2014  2/1/2014   2/13/2014 2/15/2014 
GAURAV YADAV C-14085.xlsx HP_WI_5151 2/14/2014  2/28/2014  2/14/2014   2/26/2014 2/28/2014 
NITIN   C-14077.pdf HP_WI_2121 2/1/2014  2/12/2014  2/1/2014   2/13/2014 2/13/2014 
SRINIVAS  C-14085.xlsx HP_WI_5151 2/14/2014  2/28/2014  2/14/2014   2/26/2014 2/25/2014 

Теперь, используя LINQ запрос, я должен генерировать следующий результат.

ResourceName ContentName ProjectName PlanndStartDate PlannedEndDate ActualStartDate ActualEndDate DesiredDate TotalDays GroupDays 
ANIL   C-1479.doc HP_WI_4141 2/24/2014  2/25/2014  2/24/2014  2/24/2014  2/23/2014  -1  -1 
ANIL   C-1234.docx HP_WI_3131 2/1/2014  2/12/2014  2/1/2014   2/13/2014  2/11/2014  -2  -2 
CHETNA   C-1479.doc HP_WI_4141 2/24/2014  2/25/2014  2/24/2014  2/24/2014  2/26/2014   2  -1 
CHETNA   C-1479.doc HP_WI_4141 2/1/2014  2/12/2014  2/1/2014   2/13/2014  2/10/2014  -3  -1 
CHETNA   C-14085.xlsxHP_WI_5151 2/14/2014  2/28/2014 2/14/2014     2/26/2014  2/26/2014 0  0 
GAURAV YADAV C-1479.doc HP_WI_4141 2/24/2014  2/25/2014  2/24/2014  2/24/2014  2/25/2014   1  3 
GAURAV YADAV C-1479.doc HP_WI_4141 2/1/2014  2/12/2014  2/1/2014   2/13/2014  2/15/2014   2  3 
GAURAV YADAV C-14085.xlsxHP_WI_5151 2/14/2014  2/28/2014 2/14/2014  2/26/2014  2/28/2014   2  2 
NITIN   C-14077.pdf HP_WI_2121 2/1/2014  2/12/2014  2/1/2014   2/13/2014  2/13/2014   0  0 
SRINIVAS  C-14085.xlsxHP_WI_5151 2/14/2014  2/28/2014 2/14/2014   2/26/2014  2/25/2014  -1  -1 

Теперь результат должен быть группой по «ResouceName», «ContentName» и «Projectname» и колонки «TotalDays» является разница «DesireEndDate» и «ActualEndDate» и колонки «GroupDays» является сумма «TodalDays «по группе.

Просьба предложить мне, как это сделать. Спасибо.

+4

Что вы пытались до сих пор? –

+1

Мне это не удалось * найти десять отличий * puzzle :( –

+0

Не могли бы вы рассказать мне, что не так? –

ответ

2

GroupBy и петля:

var groups = from row in table.AsEnumerable() 
      let ResouceName = row.Field<string>("ResouceName") 
      let ContentName = row.Field<string>("ContentName") 
      let ProjectName = row.Field<string>("ProjectName") 
      group row by new{ ResouceName, ContentName, ProjectName } into Group 
      select Group; 

var tblResult = table.Clone(); 
tblResult.Columns.Add("TotalDays", typeof(int)); 
tblResult.Columns.Add("GroupDays", typeof(int); 

foreach (var group in groups) 
{ 
    int GroupDays = group.Sum(r => (r.Field<DateTime>("DesiredDate") - r.Field<DateTime>("ActualEndDate")).Days); 
    foreach(DataRow row in group) 
    { 
     DateTime PlanndStartDate = row.Field<DateTime>("PlanndStartDate"); 
     DateTime PlannedEndDate = row.Field<DateTime>("PlannedEndDate"); 
     DateTime ActualStartDate = row.Field<DateTime>("ActualStartDate"); 
     DateTime ActualEndDate = row.Field<DateTime>("ActualEndDate"); 
     DateTime DesiredDate = row.Field<DateTime>("DesiredDate"); 
     TimeSpan Total = DesiredDate - ActualEndDate; 
     tblResult.Rows.Add(group.Key.ResouceName, group.Key.ContentName, group.Key.ProjectName, PlanndStartDate, PlannedEndDate, ActualStartDate, ActualEndDate, DesiredDate, Total.Days, GroupDays); 
    } 
} 
+0

Почему вы используете 'AsEnumerable'?' IQueryably' также имеет расширение 'GroupBy' – Grundy

+0

@Grundy: потому что это встроенная память' DataTable'. –

+0

oh, я думал, что OP означает LinqToSQL или EF ... – Grundy

Смежные вопросы