2011-08-25 48 views
0

我正在與LINQ和EF第一次合作。我設計了一個數據庫,通過名爲「DeveloperMatchesProfile」的多對多實體將開發者實體與SkillProfile實體鏈接起來。如何避免編寫LINQ中的Where()運算符?

我遇到的問題是我的LINQ查詢(取決於使用原始範圍變量的導航屬性)需要額外的Where子句。這看起來可能會很快變成低效率。有沒有更好的辦法?這個構造是否會對性能造成威脅?

My Entities

My Query

+0

遞歸應該在哪裏?你確定你在談論遞歸,而不只是一個嵌套的子查詢或派生表嗎? – Aaronaught

+0

你是對的,它只是一個嵌套Where() - 我將從標題中刪除誤導性詞語。 –

回答

3

爲什麼不這樣做?

var skills = _Context.DeveloperMatchesProfiles 
     .Where(x => x.DeveloperId == developerId) 
     .Select(x => x.SkillProfile); 

您只需使用該開發人員ID選擇DeveloperMatchProfiles的實例並選擇鏈接的導航屬性即可。如果我正確理解你的關係,你基本上會後退。

+1

額頭拍擊因素很好。謝謝Tejs。 :) –

2

此構造是否會對性能造成威脅?

沒有獲得實際的sql生成,並查看執行計劃,執行時間和IO沒有辦法知道。

有沒有更好的方法?

可能我建議在測試存在時使用.Any()而不是.Count()

_Context.SkillProfiles.Where(
    p => p.DeveloperMatchesProfiles.Any(d => d.DeveloperId == developerId) 
); 
+0

謝謝,大衛。這很有幫助。 –

相關問題