From: shapper on
Hello,

On my repositories I always return a IQueryable when getting multiple
records, for example in:
productRepository.GetMoreExpensive();

However, most the code I see use IEnumerable. For example:
1. ToPagedList extension ...
2. AutoMapper to mape between a source collection and a destination
collection ...

So I always need to change my IQueryable obtained through the
repository and convert it to IEnumerable to be able to use the
ToPagedList extension and the AutoMapper.

Should I use IEnumerable on my repositories?

I am afraid I am doing something wrong.

Thanks,
Miguel

From: Harlan Messinger on
shapper wrote:
> Hello,
>
> On my repositories I always return a IQueryable when getting multiple
> records, for example in:
> productRepository.GetMoreExpensive();
>
> However, most the code I see use IEnumerable. For example:
> 1. ToPagedList extension ...
> 2. AutoMapper to mape between a source collection and a destination
> collection ...
>
> So I always need to change my IQueryable obtained through the
> repository and convert it to IEnumerable to be able to use the
> ToPagedList extension and the AutoMapper.

IQueryable IS IEnumerable. IQueryable inherits IEnumerable's interface.
In addition, anything that implements IQueryable<T> implements
IEnumerable<T> and also IEnumerable as well. What are you encountering
that leads you to think you need to convert explicitly?
From: shapper on
On Sep 14, 7:16 pm, Harlan Messinger
<hmessinger.removet...(a)comcast.net> wrote:
> shapper wrote:
> > Hello,
>
> > On my repositories I always return a IQueryable when getting multiple
> > records, for example in:
> > productRepository.GetMoreExpensive();
>
> > However, most the code I see use IEnumerable. For example:
> > 1. ToPagedList extension ...
> > 2. AutoMapper to mape between a source collection and a destination
> > collection ...
>
> > So I always need to change my IQueryable obtained through the
> > repository and convert it to IEnumerable to be able to use the
> > ToPagedList extension and the AutoMapper.
>
> IQueryable IS IEnumerable. IQueryable inherits IEnumerable's interface.
> In addition, anything that implements IQueryable<T> implements
> IEnumerable<T> and also IEnumerable as well. What are you encountering
> that leads you to think you need to convert explicitly?

Usually I return a IQueryable from my repositories ... I got that
adivice some time ago.
To be honest I don't remember the advantages but I think it might be
related with Linq.

Basically, I am using AutoMapper as follows:

Articles = Mapper.Map<IQueryable<Article>,
IEnumerable<ArticleItemViewModel>>(articleRepository.GetAll
()).ToPagedList(page.HasValue ? page.Value - 1 : 0, 20),

I am mapping a IQueryable<Article> to an
IEnumerable<ArticleItemViewModel> and finally converting to PagedList.

I got this working now ... Since IQueryable inherits IEnumerable.

Thanks,
Miguel