[英]Filter Results Before FirstOrDefault() and Then Using FirstOrDefault()
[英]Explanation of Code : retrieve item from Array using FirstorDefault()
可以說我在數組中有一些項目
Product[] myProducts = new Product[]
{
new Product { ID = 1, name = "Ketchup1", category = "Sauces", price = 200.00m },
new Product { ID = 2, name = "Ketchup2", category = "Sauces", price = 200.00m },
new Product { ID = 3, name = "Ketchup3", category = "Sauces", price = 200.00m }
};
然后讓我說我嘗試使用此方法檢索
public Product GetProductById(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product;
}
我已經閱讀了它的功能,但我不知道這里發生了什么:
FirstorDefault(p => p.Id == id);
FirstOrDefault(predicate)
迭代集合並返回與謂詞匹配的第一個元素。 在您的示例中,它將是p.Id == id
的第一個元素。 如果沒有與謂詞匹配的值,則返回默認值(對於所有引用類型,為null
)。
(p) => p.Id == id
是一個匹配Func<Product, bool>
的lambda表達式 - 它接受一個Product
類型的參數(它名為p
)並返回bool
值。
FirstOrDefault
可能看起來與它的eduLINQ等價物非常相似:
public static TSource FirstOrDefault<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
// Argument validation elided
foreach (TSource item in source)
{
if (predicate(item))
{
return item;
}
}
return default(TSource);
}
這個條件比需要滿足。
(p) => p.Id == id
是lambda函數,給定參數p返回p.Id == id
它被稱為每個元素,直到它是真的。
因此, product
將是Id與給定id匹配的第一個元素,如果不存在,則為null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.