Ради "постобработки" в методе я хочу импортировать в метод дополнительную функцию.
Как импортировать Func
, который возвращает анонимный тип в качестве параметра для метода расширения .Select?
Выражение анонимно, как:
p => new
{
ThumnailUrl = p.PicasaEntry.Media.Thumbnails[0].Attributes["url"],
ImageUrl = p.PhotoUri
}
и должен использоваться в параметре ????? и выполняется в .Select (?????)
private void BindControl<T, U>(string uri, DataBoundControl target, ?????)
where T : KindQuery, new()
where U : PicasaEntity, new()
{
PicasaFeed feed = CreateFeed<T>(uri);
albumList.DataSource = GetPicasaEntries<U>(feed).Select(?????);
albumList.DataBind();
}
обновление:
наконец, я хочу назвать это как:
string albumUri = PicasaQuery.CreatePicasaUri(PicasaUserID, PicasaAlbumID);
BindControls<AlbumQuery, Album>(albumUri, albumList, ?????);
string photoUri = PicasaQuery.CreatePicasaUri(PicasaUserID, PicasaAlbumID);
BindControls<PhotoQuery, Photo>(photoUri, slideShow, ?????);
другие методы похожи на:
private PicasaFeed CreateFeed<T>(string uri)
where T : KindQuery, new()
{
PicasaFeed feed = null;
try
{
PicasaService service = new PicasaService(PicasaApplicationName);
T query = new T();
query.BaseAddress = uri;
feed = service.Query(query);
}
catch (Exception ex)
{
//exception handling not shown
}
return feed;
}
private IEnumerable<T> GetPicasaEntries<T>(PicasaFeed feed)
where T : PicasaEntity, new()
{
if(feed == null){
return null;
}
IEnumerable<T> entries = null;
string cacheKey = feed.Id.ToString();
if(Cache.Get(cacheKey) == null)
{
entries = feed.Entries.Select(x => new T() { AtomEntry = x }).ToList();
Cache.Insert(cacheKey, entries,
null, Cache.NoAbsoluteExpiration, new TimeSpan(0,20,0));
}
return entries;
}