Разбиение оператора sql в Linq на 2 или более частей зависит от состояния программы - PullRequest
1 голос
/ 22 мая 2009

Я являюсь руководителем Linq, поэтому мне нужна помощь ..

Я не знаю, в синтаксисе Linq, разбив запрос на 2 или более частей,

как в следующем примере,

записи будут загружаться сразу с сервера sql на каждом этапе, или они будут отправляться на сервер в тот момент, когда я начну видеть все данные? для примера, когда я связываю некоторые объекты (Datagrid для примера)

System.Linq.IQueryable<Panorami> Result = db.Panorami;
byte FoundOneContion = 0;

//step 1
if (!string.IsNullOrEmpty(Title))
{
  Result = Result.Where(p => SqlMethods.Like(p.Title, "%" + Title + "%"));

  FoundOneContion = 1;
}
//step 2
if (!string.IsNullOrEmpty(Subject))
{
  Result = Result.Where(p => SqlMethods.Like(p.Subject, "%" + Subject + "%"));
  FoundOneContion = 1;
}
if (FoundOneContion == 0)
{
  return null;
}
else
{
  return Result.OrderBy(p => p.Title).Skip(PS * CP).Take(PS);
}

Если, к сожалению, Linq скачает сразу все записи

(Поэтому у меня было такое сомнение, что он был прав!)

существует ли какой-либо синтаксис для округления проблемы?

Например: троичный оператор (условие? Истинная часть: ложная часть)

За любые предложения я был бы очень признателен. спасибо всем!

1 Ответ

1 голос
/ 22 мая 2009

Приведенный выше метод не перечисляет запрос - поэтому не выполняется никаких вызовов базы данных. Запрос составлен и не выполнен.

Вы можете перечислить запрос, вызвав foreach, или вызвав метод, который вызывает foreach (например, ToList, ToArray), или вызвав GetEnumerator(). Это приведет к выполнению запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...