首先,在對問題的評論中提及user3185569,你必須使用這個指令更改代碼:Capitalization Conventions
其次,你必須考慮數據表示。人與缺席之間的關係是什麼樣的?一個人可能有幾次缺席(1:N關係)。所以,你必須存儲關於缺勤的數據和與此缺席有關的人。
類:
public class Person
{
public int PersonCode { get; set; }
public string Surname { get; set; }
public string Name { get; set; }
public string Address { get; set; }
//constructor, etc.
public override string ToString()
{
return string.Format("{0} {1} {2} {3}", PersonCode, Surname, Name, Address);
}
}
public class Absence
{
public int AbsenceCode { get; set; }
public int TypeAbsence { get; set; }
public DateTime StartingDate { get; set; }
public DateTime EndingDate { get; set; }
public string Description { get; set; }
public string State { get; set; }
//"a link" to person
public Person Person { get; set; }
//constructor, etc.
public override string ToString()
{
return string.Format("{0}\t|\t{1}\t{2}\t{3}", Person.ToString(), TypeAbsence.ToString(),
StartingDate.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture),
EndingDate.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture));
}
}
用法:
List<Person> persons = new List<Person>()
{
new Person() {PersonCode = 1, Surname = "Los", Name = "Maciej", Address = "Poland, ..."},
new Person() {PersonCode = 2, Surname = "Doe", Name = "John", Address = "USA, ..."},
new Person() {PersonCode = 3, Surname = "McAlister", Name = "Fred", Address = "UK, ..."},
new Person() {PersonCode = 4, Surname = "Sommer", Name = "Anna", Address = "Canada, ..."},
};
List<Absence> absences = new List<Absence>()
{
new Absence(){AbsenceCode = 1, TypeAbsence=1, StartingDate = new DateTime(2017,5,11), EndingDate = new DateTime(2017,5,15),
Description = "whatever", State = "A", Person = persons[0]},
new Absence(){AbsenceCode = 2, TypeAbsence=1, StartingDate = new DateTime(2017,5,18), EndingDate = new DateTime(2017,6,8),
Description = "whatever", State = "A", Person = persons[1]},
new Absence(){AbsenceCode = 3, TypeAbsence=2, StartingDate = new DateTime(2017,6,1), EndingDate = new DateTime(2017,6,12),
Description = "whatever", State = "B", Person = persons[2]},
new Absence(){AbsenceCode = 4, TypeAbsence=2, StartingDate = new DateTime(2017,6,1), EndingDate = new DateTime(2017,6,5),
Description = "whatever", State = "B", Person = persons[0]},
new Absence(){AbsenceCode = 5, TypeAbsence=1, StartingDate = new DateTime(2017,6,2), EndingDate = new DateTime(2017,6,5),
Description = "whatever", State = "A", Person = persons[2]}
};
//define date-range to filter Absences data
DateTime dfrom = new DateTime(2017,6,5);
DateTime dTo = new DateTime(2017,6,9);
var LastWeekAbsencesByPerson = absences
.Where(x=> (x.StartingDate<=dTo) && (x.EndingDate>=dfrom))
.OrderBy(x => x.Person.Surname)
.ThenBy(x => x.StartingDate)
.ToList();
foreach(var lwabp in LastWeekAbsencesByPerson)
{
Console.WriteLine("{0}", lwabp.ToString());
Console.WriteLine("{0}", new string('-', 60));
}
在以相同的方式,可以按日期,人,缺席的類型等
過濾數據作爲對日期過濾器,我強烈建議閱讀此:Determine Whether Two Date Ranges Overlap
有很多t要做,改善,但這是你的工作。
祝你好運!
備註:您需要開始遵循以下命名約定:https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions – user3185569
您能否更清楚?就像製作想要製作的所需數據結構的層次結構一樣?據我瞭解,你可以在'person'中製作一個'calendar'的列表,以保持你的工作人員每次缺席。 –
對我來說,你不需要'日曆類就可以得到所有人的缺席。 –