使用 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();

假设我的 table 名称和属性都是正确的...有人可以向我解释为什么这种分配数据源的方式不适用于 windows 表单应用程序。

但是我在其他帖子中看到以下内容(以及我在我的项目中使用的内容)有效。
现在这仅仅是因为组合框属性是如何在 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 扩展方法的工作原理。