[英]Confusion in lambda expression for a query
我想執行一個查詢,該查詢在單擊時從combobox(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();
假設您的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>
並返回第一個match 。 因此,我們需要做的是向方法顯示我們要選擇的項目
我們將Func<T, bool>
作為Lambda表達式傳遞。 在lambda中,我們想說: “請找到s.custId
與另一個具有相同id(在您的情況下為s.custId)的對象的匹配項”
為了進行匹配,我們使用custIdComboBox.SelectedItem
。 SelectedItem
的問題在於它屬於object
類型,而不是Customer
類型(您可以在MSDN上查找ComboBox.SelectedItem並看到它返回一個object
)。 因此,我們明確將SelectedItem
轉換為Customer
強制轉換后,我們提取客戶的ID
屬性以使其與迭代集合中任何對象的ID
匹配
如果未找到匹配項,則FirstOrDefault
返回null
,因此我們必須在訪問customer
屬性之前執行null
檢查。 如果不為null,則將其Name
屬性分配給TextBox
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.