2017-10-09 44 views
0

给出下面的实例变量使用lambda表达式来设置组合框的数据来源的C#Windows窗体应用程序

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

允许假设我的表名和属性是正确的......可为什么有人这样向我解释分配数据源不适用于Windows窗体应用程序。

但是我在其他文章中看到以下内容(以及我在项目中使用的内容)的作用。
现在是这仅仅是因为组合框属性如何分配在Windows窗体与Web窗体?

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

谢谢... 和感恩节快乐!

+1

其中(x => x.BankAccountId),您的回账账号是一个布尔值吗? – user6144226

+0

我在这里看到我需要一个值来比较我的表情...... – sneufeld

回答

0

ComboBox控件的数据源可以是数据库,Web服务或稍后可用于生成数据绑定控件的对象。

代码的问题在于你的lambda表达式。 您的案例中的扩展方法“Where”需要Func<BankAccounts, bool>类型的代理。即,您必须通过一个将BankAccounts作为输入的委托,并将bool作为用于过滤结果的输出。

所以,如果你想找出BankAccounts为1的编号,您的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(); 

正如你所看到的,所有你需要为p屁股的Where方法是一种可用于过滤结果的方法。然后,列表中的每个项目都会通过此方法运行,并且只有通过测试的项目才会返回。这就是LINQ中的Where扩展方法的工作原理。

+1

我明白了......对不起,我忘了我需要一个值来比较表达式...... – sneufeld

相关问题