我正在與LINQ和EF第一次合作。我設計了一個數據庫,通過名爲「DeveloperMatchesProfile」的多對多實體將開發者實體與SkillProfile實體鏈接起來。如何避免編寫LINQ中的Where()運算符?
我遇到的問題是我的LINQ查詢(取決於使用原始範圍變量的導航屬性)需要額外的Where子句。這看起來可能會很快變成低效率。有沒有更好的辦法?這個構造是否會對性能造成威脅?
我正在與LINQ和EF第一次合作。我設計了一個數據庫,通過名爲「DeveloperMatchesProfile」的多對多實體將開發者實體與SkillProfile實體鏈接起來。如何避免編寫LINQ中的Where()運算符?
我遇到的問題是我的LINQ查詢(取決於使用原始範圍變量的導航屬性)需要額外的Where子句。這看起來可能會很快變成低效率。有沒有更好的辦法?這個構造是否會對性能造成威脅?
爲什麼不這樣做?
var skills = _Context.DeveloperMatchesProfiles
.Where(x => x.DeveloperId == developerId)
.Select(x => x.SkillProfile);
您只需使用該開發人員ID選擇DeveloperMatchProfiles的實例並選擇鏈接的導航屬性即可。如果我正確理解你的關係,你基本上會後退。
額頭拍擊因素很好。謝謝Tejs。 :) –
此構造是否會對性能造成威脅?
沒有獲得實際的sql生成,並查看執行計劃,執行時間和IO沒有辦法知道。
有沒有更好的方法?
可能我建議在測試存在時使用.Any()
而不是.Count()
?
_Context.SkillProfiles.Where(
p => p.DeveloperMatchesProfiles.Any(d => d.DeveloperId == developerId)
);
謝謝,大衛。這很有幫助。 –
遞歸應該在哪裏?你確定你在談論遞歸,而不只是一個嵌套的子查詢或派生表嗎? – Aaronaught
你是對的,它只是一個嵌套Where() - 我將從標題中刪除誤導性詞語。 –