簡體   English   中英

lambda表達式中的查詢混亂

[英]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();

假設您的SelectedItemCustomer

var customer = db.customers.FirstOrDefault(s => s.custId == ((Customer)custIdComboBox.SelectedItem).ID);

if (customer != null)
{
     customerName.Text = customer.Name;
}

請注意,如果SelectedItem類型可能不同,則將拋出InvalidCastException

編輯

好的,讓我們看看執行流程是什么:

  1. 我們正在您的客戶集合上使用Enumerable.FirstOrDefault 此方法采用Func<T, bool>並返回第一個match 因此,我們需要做的是向方法顯示我們要選擇的項目

  2. 我們將Func<T, bool>作為Lambda表達式傳遞。 在lambda中,我們想說: “請找到s.custId與另一個具有相同id(在您的情況下為s.custId)的對象的匹配項”

  3. 為了進行匹配,我們使用custIdComboBox.SelectedItem SelectedItem的問題在於它屬於object類型,而不是Customer類型(您可以在MSDN上查找ComboBox.SelectedItem並看到它返回一個object )。 因此,我們明確將SelectedItem轉換為Customer

  4. 強制轉換后,我們提取客戶的ID屬性以使其與迭代集合中任何對象的ID匹配

  5. 如果未找到匹配項,則FirstOrDefault返回null ,因此我們必須在訪問customer屬性之前執行null檢查。 如果不為null,則將其Name屬性分配給TextBox

暫無
暫無

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

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