簡體   English   中英

使用Lambda表達式設置組合框數據源C#Windows Forms應用程序

[英]using lambda expression to set combo box data source c# windows Forms application

給定以下實例變量

        cboBankAccountId.DataSource = db.BankAccounts.Where(x => x.BankAccountId).ToList();

讓我們假設我的表名和屬性都是正確的...有人可以向我解釋為什么這種分配數據源的方法不適用於Windows Form應用程序。

但是我在其他帖子中看到以下內容(以及我在項目中使用的內容)有效。
現在這僅僅是因為如何在Windows窗體和Web窗體中分配組合框屬性?

cboBankAccountId = db.BankAccounts;
cboBankAccountId.ValueMember = "BankAccountId";
cboBankAccountId.DisplayMember = "FullName";

謝謝...,感恩節快樂!

ComboBox控件的數據源可以是數據庫,Web服務或以后可用於生成數據綁定控件的對象。

您的代碼問題出在您的lambda表達式中。 在您的情況下,擴展方法“ Where”需要類型為Func<BankAccounts, bool>的委托。 即,您必須傳遞一個委托,該委托將BankAccounts作為輸入,並給bool作為輸出,用於過濾結果。

因此,如果您想找出ID為1的BankAccounts,則lambda表達式將如下所示:

cboBankAccountId.DataSource = db.BankAccounts.Where(x => x.BankAccountId == 1).ToList();

如果您不熟悉Lambda表達式,也可以將其翻譯為:

cboBankAccountId.DataSource = db.BankAccounts.Where((BankAccounts x) =>
{
    return x.BankAccountId == 1;
}).ToList();

或完整版本:

public bool Filter(BankAccountId id)
{
     bool filterPassed;

     if(id == 1)
         filterPassed = true;
     else
         filterPassed = false;  

     return filterPassed;
}
cboBankAccountId.DataSource = db.BankAccounts.Where(Filter).ToList();

如您所見,傳遞給Where方法所需要的是一個可以用來過濾結果的方法。 然后,列表中的每個項目都將通過此方法運行,並且僅返回通過測試的項目。 這就是LINQ中Where擴展方法的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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