簡體   English   中英

將查詢結果返回到列表框

[英]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

我真的不明白你的意思。

至於錯誤,它說您不能從IEnumerableExpenseItem 您必須像最終示例一樣應用它,然后返回該項目而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM