![](/img/trans.png)
[英]Which is more efficient in this case? LINQ Query or FOREACH loop?
[英]In Linq, which is more efficient, join or include
我正在嘗試收集對象的集合,並且我想找出哪個更有效。 現在,我的查詢有16個結果,但我們可能正在使用1000s的數據集。
假設我正在使用以下模型:
public ProjectSubmission()
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid ProjectSubmissionId { get; set; }
public System.Guid ProjectId { get; set; }
[ForeignKey("ProjectId")]
public virtual Project Project { get; set; }
public string SubmissionTitle { get; set; }
}
public Project()
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid ProjectId { get; set; }
public string Title { get; set; }
}
這將為我提供更好的性能,這是:
var subVModel =
(
from ps in db.ProjectSubmission
.Include(s => s.Project)
where ps.IsActive
&& (filter.ProjectId == Guid.Empty || ps.Project.ProjectId == filter.ProjectId)
&& (filter.SubmissionTitle == string.Empty || ps.SubmissionTitle .Contains(filter.SubmissionTitle))
select ps);
要么:
var subVModel =
(
from ps in db.ProjectSubmission
join p in db.Project on ps.ProjectId equals p.ProjectId
where ps.IsActive
&& (filter.ProjectId == Guid.Empty || p.ProjectId == filter.ProjectId)
&& (filter.SubmissionTitle == string.Empty || ps.SubmissionTitle .Contains(filter.SubmissionTitle))
select ps);
現在,它們都為16條記錄產生了.032秒。
簡單情況不會有任何區別,因為Include
調用會生成一個join子句以從includeed屬性獲取數據。 另一方面,如果您只想從包含的導航屬性中選擇某些列,則將無法使用“包含”來做到這一點。 如果使用聯接,則可以指定要包括在結果集中的列。
盡管include是更易於閱讀的語法,但在簡單情況下沒有區別。 但是在某些情況下,包括引起額外的聯接(在EF 6.1之前)。 並造成額外的時間。 這是EF中的錯誤,請在此處報告
無論如何,最好使用EF分析器並監視您的查詢。 像Entity Framework Profiler一樣 ,或使用Glimpse EF擴展
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.