我想执行一个查询,它在点击时从组合框(custIdComboBox)获取值,在数据库中找到它的名称并将其放在文本框中。我很困惑为它制作一个LAMBDA表达式。虽然我已经尝试了很多,但它没有以正确或必要的方式工作。
查询:"select name from customer where custId= " +custIdComboBox.SelectedItem+ ""
我希望结果显示在文本框中(customeName.text)。
我正在尝试的是:customerName.Text = db.customers.Where(s => s.custId == custIdComboBox.SelectedItem).Select(w => w.name).FirstOrDefault();
答案 0 :(得分:1)
假设您的SelectedItem
是Customer
:
var customer = db.customers.FirstOrDefault(s => s.custId == ((Customer)custIdComboBox.SelectedItem).ID);
if (customer != null)
{
customerName.Text = customer.Name;
}
请注意SelectedItem
可能属于不同的类型,这会引发InvalidCastException
修改强>
好的,让我们看看执行的流程是什么:
我们在您的客户收藏中使用Enumerable.FirstOrDefault
。此方法需要Func<T, bool>
并返回第一个匹配。所以我们需要做的是显示我们希望它选择哪个项目的方法
我们将Func<T, bool>
作为Lambda Expression传递。在lambda中我们想说:“请找到s.custId
与另一个具有相同id的对象(在你的情况下是s.custId)”
为了进行匹配,我们使用custIdComboBox.SelectedItem
。 SelectedItem
的问题是它的类型为object
,而不是Customer
类型(您可以在MSDN上查找ComboBox.SelectedItem并看到它返回object
)。因此,我们明确将SelectedItem
投射到Customer
演员表之后,我们提取客户的ID
属性,使其与迭代集合中任何对象的ID
匹配
FirstOrDefault
会返回null
,因此我们必须在访问null
属性之前进行customer
检查。如果它不为空,我们将其Name
属性分配给TextBox