あなたのコードを見ると、テキスト項目を ListBox に追加しているように思えます。もちろん、そこから給与を得るのは簡単ではありません。
代わりに、Employee オブジェクトをリストボックスに渡して、必要なすべての情報を保持する必要があります。このように、追加方法は次のようになります。
private void btnSave_Click(object sender, EventArgs e)
{
var empid = Convert.ToInt32(txtEmployeeID.Text);
var empfirstname = Convert.ToString(txtEmployeeFirstName.Text);
var emplastname = Convert.ToString(txtEmployeeLastName.Text);
var empsalary = Convert.ToDouble(txtSalary.Text);
var emp = new Employee(empid, empfirstname, emplastname, empsalary);
lstEmployeeData.Items.Add(emp);
}
もちろん、目的の表示テキストを取得するには、次のToString()
ように Employee のメソッドを再定義する必要があります。
class Employee
{
// other methods...
public override string ToString()
{
return this.EmployeeToString();
}
}
最後に、「最低給与の従業員を表示する」ボタンがクリックされたら、次のようにします。
private void btnLowestSalary_Click(object sender, EventArgs e)
{
var minSalary = lstEmployeeData.Items.OfType<Employee>().Min(x => x.Salary);
var empWithMinSalary = lstEmployeeData.Items.OfType<Employee>()
.First(x => x.Salary == minSalary);
string msg = string.Format("{0} has the lowest salary of {1}", empWithMinSalary.EmployeeFirstName, minSalary);
MessageBox.Show(msg);
}
編集 :
複数の従業員が同じ給与を持っている場合、次のようにすることができます。
private void btnLowestSalary_Click(object sender, EventArgs e)
{
var minSalary = lstEmployeeData.Items.OfType<Employee>().Min(x => x.Salary);
var empsWithMinSalary = lstEmployeeData.Items.OfType<Employee>()
.Where(x => x.Salary == minSalary);
foreach(var e in empsWithMinSalary)
{
string msg = string.Format("{0} has the lowest salary of {1}", e.EmployeeFirstName, minSalary);
MessageBox.Show(msg);
}
}
またはより良い:
private void btnLowestSalary_Click(object sender, EventArgs e)
{
var minSalary = lstEmployeeData.Items.OfType<Employee>().Min(x => x.Salary);
var empsWithMinSalary = lstEmployeeData.Items.OfType<Employee>()
.Where(x => x.Salary == minSalary);
string names = "";
foreach(var e in empsWithMinSalary)
names += Environment.NewLine + e.EmployeeFirstName;
string msg = string.Format("The following emplyoees have the lowest salary of {0} : {1}", minSalary, names);
MessageBox.Show(msg);
}