2016-06-02 5 views
0

У меня есть объект, называемый EmailLog с данными, такими как To, From, Subject, Body и т. Д. В базе данных.исключая столбец в результатах запроса

Я хотел бы исключить Body для эффективности/производительности при запросе нескольких строк. Не совсем уверен, как это осуществить. Я попытался использовать проекцию (см. Ниже), но я получаю ошибку времени выполнения, говоря, что я не могу проецировать на тип Entity.

var results = Repository.Find<EmailLog>().Select(x => new EmailLog 
      { 
       Id = x.Id, 
       Subject = x.Subject, 
       Recipient = x.Recipient, 
       Status = x.Status, 
       FirstAttempted = x.FirstAttempted, 
       LastAttempted = x.LastAttempted, 
       Attempts = x.Attempts 
      }); 

Это понятно. Я могу создать для него новый класс без Body и Project, но я применяю некоторую разбивку на страницы для запроса и не хочу оценивать результаты до тех пор, пока не применил варианты разбивки на страницы. Моя функция разбиения на страницах выглядит следующим образом:

public static PagedList<T> ApplyPagingAndSorting<T>(this IEnumerable<T> list, 
IPaginationOptions paginationOptions) 

Он принимает в перечислимом списке и применяет Skip() и Take() в список, а затем перечисляет его. Итак, как я могу удостовериться, что передаю в список IEnumerable свою функцию, которая еще не была перечислина, но связанный запрос не выбирает Body, когда он окончательно перечислит или оценит?

+0

Это должно помочь в этом вопросе https://visualstudiomagazine.com/articles/2014/09/01/splitting-tables.aspx – jbl

+1

Насколько я знаю, функция Select() не перечисляет ваш результат, это один методов Linq с использованием отложенного выполнения. Таким образом, вы должны иметь возможность проецировать класс без Body и передать его вашему ApplyPagingAndSorting(), который затем оценит ваш результат. –

+0

@FlorianHaider, я пробовал это раньше, и это дало мне ошибку, связанную с чем-то еще. Но я попробовал это сейчас, и это работает. Пожалуйста, отправьте это как ответ, и я буду рад отметить его как таковой. – Riz

ответ

0

Как упоминалось в моем комментарии, вызов Select() не будет перечислять ваш результат, это один из методов Linq, который откладывает выполнение. Поэтому, если вы делаете проекцию на класс без тела, вы все равно можете передать полученный результат IEnumerable в ваш метод ApplyPagingAndSorting().

Смежные вопросы