У меня есть базы данных SQL Server и два Entity Framework запроса, которые возвращают тот же результат:где производительность условие Entity Framework запроса
Query1
var query = (from dd in db.Departments
where (
from D in db.Departments
join DP in db.DepartmentPersonnels on D.ID equals DP.DepartmentID
join P in db.Personnels on DP.PersonneID equals P.ID
where P.UserName == Username && D.Code.IndexOf(",") >= 0
select D.Code.Substring(0, D.Code.IndexOf(","))).Contains(dd.Code)
select dd).FirstOrDefault();
Query2
var query = (from dd in db.Departments
join DP in db.DepartmentPersonnels on dd.ID equals DP.DepartmentID
join P in db.Personnels on DP.PersonneID equals P.ID
where P.UserName.Trim().ToLower() == Username.Trim().ToLower()
select dd).FirstOrDefault();
if (query != null)
{
string Code = query.Code.Split(',')[0];
retVal = (from d in db.Departments
where d.Code == Code
select d).FirstOrDefault();
}
Я прочитал работу EF во многих сообщениях, но я не нашел информации о том, где работает условие.
Я думаю, что Query2 лучше Query1 с точки зрения производительности, потому что where
условие во внешнем from
будет выполнено в SQL Server для каждой записи.
Это правда?
Спасибо.
Посмотрите на сгенерированный SQL - Query2 приведет к 2 запросам в базе данных – ErikEJ
Не угадайте, не рассудите, * measure *. Иногда поместить все в один запрос быстрее. Иногда несколько простых запросов быстрее, чем один более сложный запрос. У вас есть база данных. У вас есть код C# для доступа к этой базе данных. Вы единственный, кто способен делать разумные измерения. – hvd
@hvd В базе данных очень много записей, в этом случае я думаю, что Query2 лучше. –