Соединение устанавливается, когда вы фактически начинаете перечисление и когда вы нажимаете SubmitChanges (если есть изменения, которые нужно сделать). Я не уверен, что в приведенном выше коде открыто и используется только ОДНО соединение, но я знаю, что в тех двух местах, которые я упомянул, вы будете вызывать соединение.
Вам нужно начать изучать LinqPad и как его использовать более на dimecasts . Также ознакомьтесь с их сериями по функциям отложенного выполнения Linq 2 Sql
Обратите внимание, что-то вроде этого (getTenSomethingElse (s, s, s)) не запрашивает БД, по крайней мере, пока вы не начнете перечислять возвращаемое значение
partial class MyDataContext
{
// builds the tree to pull data from the db that matches a criteriea and pass it a ctor of another class
public System.Linq.IQueryable<SomethingElse> getSomethingElse(string searchTerm, string searchValue, string orderBy)
{
var items =
from s in
this.Somethings
select new SomethingElse(s);
return items.Where(searchTerm, searchValue).OrderBy(orderBy);
}
// calls the above method but adds take 10 to that tree
public System.Linq.IQueryable<SomethingElse> getTenSomethingElse(string searchTerm, string searchValue, string orderBy)
{
var items =
from s in
this.getSomethingElse(searchTerm, searchValue, orderBy)
select s;
return items.Take(10);
}
}
ИДК о вас, но я считаю, что это довольно круто, учитывая всю проделанную работу.
О, кстати, больше информации о расширении "Где (s, s)" можно найти в Потрясающий блог ScottGu