第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Linq:在篩選條件下何時(shí)使用SingleOrDefault與FirstOrDefault()

Linq:在篩選條件下何時(shí)使用SingleOrDefault與FirstOrDefault()

子衿沉夜 2019-07-13 19:03:37
考慮IEnenable擴(kuò)展方法SingleOrDefault()和FirstOrDefault()MSDN文檔SingleOrDefault:返回序列的唯一元素,如果序列為空,則返回默認(rèn)值;如果序列中有多個(gè)元素,此方法將拋出異常。鑒于FirstOrDefault來(lái)自MSDN(大概是在使用OrderBy()或OrderByDescending()或者根本沒(méi)有),返回序列的第一個(gè)元素??紤]幾個(gè)示例查詢(xún),何時(shí)使用這兩種方法并不總是很清楚:var someCust = db.Customers.SingleOrDefault(c=>c.ID == 5);  //unlikely(?) to be more than one, but technically COULD BEvar bobbyCust = db.Customers.FirstOrDefault(c=>c.FirstName == "Bobby");   //clearly could be one or many, so use First?var latestCust = db.Customers.OrderByDescending(x=> x.CreatedOn).FirstOrDefault();  //Single or First, or does it matter?問(wèn)題你遵循或建議什么慣例?在決定使用時(shí)SingleOrDefault()和FirstOrDefault()在你的LINQ查詢(xún)中?
查看完整描述

3 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊

無(wú)論何時(shí)你使用SingleOrDefault,您可以清楚地指出,查詢(xún)最多應(yīng)該導(dǎo)致單株結(jié)果。另一方面,當(dāng)FirstOrDefault使用時(shí),查詢(xún)可以返回任意數(shù)量的結(jié)果,但您只需要第一個(gè)結(jié)果。

我個(gè)人認(rèn)為語(yǔ)義非常不同,使用適當(dāng)?shù)恼Z(yǔ)義,取決于預(yù)期的結(jié)果,提高了可讀性。


查看完整回答
反對(duì) 回復(fù) 2019-07-13
?
慕尼黑的夜晚無(wú)繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果結(jié)果集返回0條記錄:

  • SingleOrDefault

    返回類(lèi)型的默認(rèn)值(例如,int的默認(rèn)值為0)
  • FirstOrDefault

    返回類(lèi)型的默認(rèn)值。

如果結(jié)果集返回1條記錄:

  • SingleOrDefault

    返回記錄
  • FirstOrDefault

    返回記錄

如果結(jié)果集返回許多記錄:

  • SingleOrDefault

    拋出異常
  • FirstOrDefault

    返回第一條記錄

結(jié)論:

如果希望在結(jié)果集包含許多記錄的情況下引發(fā)異常,請(qǐng)使用SingleOrDefault.

如果無(wú)論結(jié)果集包含什么,始終需要1條記錄,請(qǐng)使用FirstOrDefault


查看完整回答
反對(duì) 回復(fù) 2019-07-13
?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

的確有

  • 語(yǔ)義差異
  • 性能差異

在兩者之間。

語(yǔ)義差異:

  • FirstOrDefault

    返回第一項(xiàng)的潛在多個(gè)(或默認(rèn)情況下,不存在)。
  • SingleOrDefault

    假設(shè)存在單個(gè)項(xiàng)并返回它(如果不存在則默認(rèn))。多項(xiàng)違反合同,引發(fā)異常。

性能差異

  • FirstOrDefault通常情況下,它的迭代速度更快,直到找到元素為止,并且只有在找不到元素時(shí)才需要迭代整個(gè)可枚舉的元素。在許多情況下,很有可能找到一個(gè)項(xiàng)目。

  • SingleOrDefault需要檢查是否只有一個(gè)元素,因此始終迭代整個(gè)枚舉。準(zhǔn)確地說(shuō),它迭代直到找到第二個(gè)元素并拋出一個(gè)異常。但在大多數(shù)情況下,沒(méi)有第二個(gè)因素。

結(jié)語(yǔ)

  • 使用FirstOrDefault如果你不在乎有多少物品當(dāng)您無(wú)法負(fù)擔(dān)檢查唯一性時(shí)(例如,在一個(gè)非常大的集合中)。當(dāng)您檢查將項(xiàng)添加到集合時(shí)的唯一性時(shí),在搜索這些項(xiàng)時(shí)再次檢查可能太昂貴了。

  • 使用SingleOrDefault如果您不需要太在意性能,并且希望確保單個(gè)項(xiàng)目的假設(shè)對(duì)讀者來(lái)說(shuō)是明確的,并在運(yùn)行時(shí)進(jìn)行檢查。

在實(shí)踐中,您可以使用First / FirstOrDefault通常情況下,當(dāng)您假設(shè)一個(gè)項(xiàng)目,以提高性能。你還應(yīng)該記得Single / SingleOrDefault可以提高可讀性(因?yàn)樗愂隽藛蝹€(gè)項(xiàng)目的假設(shè))和穩(wěn)定性(因?yàn)樗鼨z查了它)并適當(dāng)?shù)厥褂昧怂?/trans>


查看完整回答
反對(duì) 回復(fù) 2019-07-13
  • 3 回答
  • 0 關(guān)注
  • 939 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)