[英]Return query results to a listbox
我有一個類ExpenseItem
和基於該類的列表。
我目前正在設計一個帶有組合框的表單,該組合框將允許我選擇特定類型的ExpenseItem
Trip,並在列表框中顯示所有結果。
表單代碼( tripSelect
是組合框, listExpenses
是列表框):
private void LoadExpenseList()
{
tripSelect.Items.Clear();
var dateSorted =
from e in roster
group e by e.Trip into tripGroup
select new { Trip = tripGroup.Key };
foreach (var e in dateSorted)
tripSelect.Items.Add(e.Trip);
}
private void LoadExpenseDetail()
{
listExpenses.Items.Clear();
var dateSorted =
from e in roster
orderby e.Trip
select e;
foreach (var e in dateSorted) ;
}
private void ExpenseRecorderForm_Load(object sender, EventArgs e)
{
}
private void tripSelect_SelectedIndexChanged(object sender, EventArgs e)
{
selectedExpense = (ExpenseItem)roster.ToFind((string)tripSelect.SelectedItem);
listExpenses.Items.Add(selectedExpense);
}
private void listExpenses_SelectedIndexChanged(object sender, EventArgs e)
{
tripTextBox.Text = selectedExpense.Trip;
tripTextBox.Enabled = false;
descriptionTextBox.Text = selectedExpense.Description;
amountTextBox.Text = selectedExpense.Amount.ToString();
paymentMethodTextBox.Text = selectedExpense.PaymentMethod;
dateExpenseTimePicker.Value = selectedExpense.Date;
dateExpenseTimePicker.Enabled = true;
noteTextBox.Text = selectedExpense.Note;
}
我不能編寫類似myVariable.Where();的代碼。 因為它不是IEnumerable
我真的不明白你的意思。
至於錯誤,它說您不能從IEnumerable
為ExpenseItem
。 您必須像最終示例一樣應用它,然后返回該項目而不是IEnumerable
。 我只是跳過Where
子句,直接使用FirstOrDefault
public ExpenseItem ToFind(string trip)
{
return this.FirstOrDefault(e => e.Trip == trip);
}
我想this
是一個定制的集合,否則Linq擴展名將無法在this
工作
編輯
如果您真的想要這個。
public IEnumerable<ExpenseItem> ToFind(string trip)
{
return this.Where(e => e.Trip == trip);
}
然后,您將需要處理來自呼叫者的列表。
private void tripSelect_SelectedIndexChanged(object sender, EventArgs e)
{
IEnumerable<ExpenseItem> selectedExpenses = roster.ToFind((string)tripSelect.SelectedItem);
foreach(ExpenseItem item in selectedExpenses)
listExpenses.Items.Add(item);
}
如果您將使用此:
public IEnumerable<ExpenseItem> ToFind(string trip)
{
return this.Where(e => e.Trip == trip);
}
您需要使用它,請注意FirstOrDefault:
selectedExpense = roster
.ToFind((string)tripSelect.SelectedItem)
.FirstOrDefault();
您的selectedExpense不是IEnumerable:
private ExpenseItem selectedExpense;
通過良好的設計,如果發現者僅匹配一條記錄,例如通過主鍵
public ExpenseItem ToFind(string expenseId)
{
return this.FirstOrDefault(e => e.ExpenseId == expenseId);
}
,使用FirstOrDefault,然后,您可以簡單地使用finder方法,如下所示:
selectedExpense = roster.ToFind(idHere);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.