diff options
| author | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-08-21 22:50:59 -0400 |
|---|---|---|
| committer | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-08-21 22:50:59 -0400 |
| commit | fbf8cc833c441de8890998600be044296acfc783 (patch) | |
| tree | d2980ddcbf5987f805916842f975795d9cabce83 /MediaBrowser.Api/HttpHandlers | |
| parent | 1c5f728ec252f7a146b7e6fa1b409e2ca3f8d920 (diff) | |
a few more async optimizations
Diffstat (limited to 'MediaBrowser.Api/HttpHandlers')
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs | 17 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/GenreHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/GenresHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/ImageHandler.cs | 26 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/ItemHandler.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/ItemListHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/PersonHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/PluginsHandler.cs | 31 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/StudioHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/StudiosHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/UsersHandler.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/YearHandler.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/YearsHandler.cs | 6 |
14 files changed, 65 insertions, 75 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs index d2dbd699d3..7d9200b111 100644 --- a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs @@ -92,10 +92,7 @@ namespace MediaBrowser.Api.HttpHandlers public override Task<string> GetContentType()
{
- return Task.Run(() =>
- {
- return MimeTypes.GetMimeType("." + GetConversionOutputFormat());
- });
+ return Task.FromResult<string>(MimeTypes.GetMimeType("." + GetConversionOutputFormat()));
}
public override bool ShouldCompressResponse(string contentType)
@@ -103,17 +100,17 @@ namespace MediaBrowser.Api.HttpHandlers return false;
}
- public override async Task ProcessRequest(HttpListenerContext ctx)
+ public override Task ProcessRequest(HttpListenerContext ctx)
{
HttpListenerContext = ctx;
if (!RequiresConversion())
{
- await new StaticFileHandler() { Path = LibraryItem.Path }.ProcessRequest(ctx);
+ return new StaticFileHandler() { Path = LibraryItem.Path }.ProcessRequest(ctx);
}
else
{
- await base.ProcessRequest(ctx);
+ return base.ProcessRequest(ctx);
}
}
@@ -180,15 +177,15 @@ namespace MediaBrowser.Api.HttpHandlers // If we ever decide to disable the ffmpeg log then you must uncomment the below line.
//process.BeginErrorReadLine();
- Task debugLogTask = Task.Run(async () => { await process.StandardError.BaseStream.CopyToAsync(logStream); });
+ Task debugLogTask = process.StandardError.BaseStream.CopyToAsync(logStream);
- await process.StandardOutput.BaseStream.CopyToAsync(stream);
+ await process.StandardOutput.BaseStream.CopyToAsync(stream).ConfigureAwait(false);
process.WaitForExit();
Logger.LogInfo("FFMpeg exited with code " + process.ExitCode);
- await debugLogTask;
+ await debugLogTask.ConfigureAwait(false);
}
catch (Exception ex)
{
diff --git a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs index c4198b0288..e9e5c41f45 100644 --- a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers /// </summary>
public class GenreHandler : BaseJsonHandler<IBNItem<Genre>>
{
- protected override async Task<IBNItem<Genre>> GetObjectToSerialize()
+ protected override Task<IBNItem<Genre>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers string name = QueryString["name"];
- return await GetGenre(parent, user, name);
+ return GetGenre(parent, user, name);
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers // Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Genre>()
{
- Item = await Kernel.Instance.ItemController.GetGenre(name),
+ Item = await Kernel.Instance.ItemController.GetGenre(name).ConfigureAwait(false),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs index cd68f1eaa9..8ac30043ef 100644 --- a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs @@ -11,13 +11,13 @@ namespace MediaBrowser.Api.HttpHandlers {
public class GenresHandler : BaseJsonHandler<IEnumerable<IBNItem<Genre>>>
{
- protected override async Task<IEnumerable<IBNItem<Genre>>> GetObjectToSerialize()
+ protected override Task<IEnumerable<IBNItem<Genre>>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
- return await GetAllGenres(parent, user);
+ return GetAllGenres(parent, user);
}
/// <summary>
@@ -53,7 +53,7 @@ namespace MediaBrowser.Api.HttpHandlers }
}
- IEnumerable<Genre> entities = await Task.WhenAll<Genre>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); }));
+ IEnumerable<Genre> entities = await Task.WhenAll<Genre>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); })).ConfigureAwait(false);
return entities.Select(e => new IBNItem<Genre>() { Item = e, BaseItemCount = data[e.Name] });
}
diff --git a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs index 39a115cefb..48c67eeef2 100644 --- a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs @@ -29,28 +29,28 @@ namespace MediaBrowser.Api.HttpHandlers if (!string.IsNullOrEmpty(personName))
{
- return (await Kernel.Instance.ItemController.GetPerson(personName)).PrimaryImagePath;
+ return (await Kernel.Instance.ItemController.GetPerson(personName).ConfigureAwait(false)).PrimaryImagePath;
}
string genreName = QueryString["genre"];
if (!string.IsNullOrEmpty(genreName))
{
- return (await Kernel.Instance.ItemController.GetGenre(genreName)).PrimaryImagePath;
+ return (await Kernel.Instance.ItemController.GetGenre(genreName).ConfigureAwait(false)).PrimaryImagePath;
}
string year = QueryString["year"];
if (!string.IsNullOrEmpty(year))
{
- return (await Kernel.Instance.ItemController.GetYear(int.Parse(year))).PrimaryImagePath;
+ return (await Kernel.Instance.ItemController.GetYear(int.Parse(year)).ConfigureAwait(false)).PrimaryImagePath;
}
string studio = QueryString["studio"];
if (!string.IsNullOrEmpty(studio))
{
- return (await Kernel.Instance.ItemController.GetStudio(studio)).PrimaryImagePath;
+ return (await Kernel.Instance.ItemController.GetStudio(studio).ConfigureAwait(false)).PrimaryImagePath;
}
BaseItem item = ApiService.GetItemById(QueryString["id"]);
@@ -64,7 +64,7 @@ namespace MediaBrowser.Api.HttpHandlers private Stream _SourceStream = null;
private async Task<Stream> GetSourceStream()
{
- await EnsureSourceStream();
+ await EnsureSourceStream().ConfigureAwait(false);
return _SourceStream;
}
@@ -75,7 +75,7 @@ namespace MediaBrowser.Api.HttpHandlers {
try
{
- _SourceStream = File.OpenRead(await GetImagePath());
+ _SourceStream = File.OpenRead(await GetImagePath().ConfigureAwait(false));
}
catch (FileNotFoundException ex)
{
@@ -101,14 +101,14 @@ namespace MediaBrowser.Api.HttpHandlers public async override Task<string> GetContentType()
{
- await EnsureSourceStream();
+ await EnsureSourceStream().ConfigureAwait(false);
- if (await GetSourceStream() == null)
+ if (await GetSourceStream().ConfigureAwait(false) == null)
{
return null;
}
- return MimeTypes.GetMimeType(await GetImagePath());
+ return MimeTypes.GetMimeType(await GetImagePath().ConfigureAwait(false));
}
public override TimeSpan CacheDuration
@@ -121,14 +121,14 @@ namespace MediaBrowser.Api.HttpHandlers protected async override Task<DateTime?> GetLastDateModified()
{
- await EnsureSourceStream();
+ await EnsureSourceStream().ConfigureAwait(false);
- if (await GetSourceStream() == null)
+ if (await GetSourceStream().ConfigureAwait(false) == null)
{
return null;
}
- return File.GetLastWriteTime(await GetImagePath());
+ return File.GetLastWriteTime(await GetImagePath().ConfigureAwait(false));
}
private int? Height
@@ -223,7 +223,7 @@ namespace MediaBrowser.Api.HttpHandlers protected override async Task WriteResponseToOutputStream(Stream stream)
{
- ImageProcessor.ProcessImage(await GetSourceStream(), stream, Width, Height, MaxWidth, MaxHeight, Quality);
+ ImageProcessor.ProcessImage(await GetSourceStream().ConfigureAwait(false), stream, Width, Height, MaxWidth, MaxHeight, Quality);
}
private string GetImagePathFromTypes(BaseItem item, ImageType imageType, int imageIndex)
diff --git a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs index ac27633b7b..4f2a9c68e5 100644 --- a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs @@ -10,7 +10,7 @@ namespace MediaBrowser.Api.HttpHandlers {
public class ItemHandler : BaseJsonHandler<DTOBaseItem>
{
- protected async override Task<DTOBaseItem> GetObjectToSerialize()
+ protected override Task<DTOBaseItem> GetObjectToSerialize()
{
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers return null;
}
- return await ApiService.GetDTOBaseItem(item, user);
+ return ApiService.GetDTOBaseItem(item, user);
}
protected virtual BaseItem ItemToSerialize
diff --git a/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs index 6e4a420813..9d5e3eb580 100644 --- a/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs @@ -9,13 +9,13 @@ using MediaBrowser.Model.Entities; namespace MediaBrowser.Api.HttpHandlers
{
- public class ItemListHandler : BaseJsonHandler<IEnumerable<DTOBaseItem>>
+ public class ItemListHandler : BaseJsonHandler<DTOBaseItem[]>
{
- protected override async Task<IEnumerable<DTOBaseItem>> GetObjectToSerialize()
+ protected override Task<DTOBaseItem[]> GetObjectToSerialize()
{
User user = Kernel.Instance.Users.First(u => u.Id == UserId);
- return await Task.WhenAll<DTOBaseItem>(ItemsToSerialize.Select(i =>
+ return Task.WhenAll<DTOBaseItem>(ItemsToSerialize.Select(i =>
{
return ApiService.GetDTOBaseItem(i, user, includeChildren: false, includePeople: false);
}));
diff --git a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs index f095a3a47c..b144c0bdf4 100644 --- a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers /// </summary>
public class PersonHandler : BaseJsonHandler<IBNItem<Person>>
{
- protected async override Task<IBNItem<Person>> GetObjectToSerialize()
+ protected override Task<IBNItem<Person>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers string name = QueryString["name"];
- return await GetPerson(parent, user, name);
+ return GetPerson(parent, user, name);
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers // Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Person>()
{
- Item = await Kernel.Instance.ItemController.GetPerson(name),
+ Item = await Kernel.Instance.ItemController.GetPerson(name).ConfigureAwait(false),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs index 109440e982..fbc16109d8 100644 --- a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs @@ -11,12 +11,11 @@ namespace MediaBrowser.Api.HttpHandlers {
protected override Task<BasePluginConfiguration> GetObjectToSerialize()
{
- return Task.Run(() =>
- {
- string pluginName = QueryString["name"];
+ string pluginName = QueryString["name"];
- return Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
- });
+ BasePluginConfiguration config = Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
+
+ return Task.FromResult<BasePluginConfiguration>(config);
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs index f451832dd4..1cb4e95f76 100644 --- a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs @@ -14,27 +14,24 @@ namespace MediaBrowser.Api.HttpHandlers {
protected override Task<IEnumerable<PluginInfo>> GetObjectToSerialize()
{
- return Task.Run(() =>
+ var plugins = Kernel.Instance.Plugins.Select(p =>
{
- var plugins = Kernel.Instance.Plugins.Select(p =>
+ return new PluginInfo()
{
- return new PluginInfo()
- {
- Path = p.Path,
- Name = p.Name,
- Enabled = p.Enabled,
- DownloadToUI = p.DownloadToUI,
- Version = p.Version
- };
- });
+ Path = p.Path,
+ Name = p.Name,
+ Enabled = p.Enabled,
+ DownloadToUI = p.DownloadToUI,
+ Version = p.Version
+ };
+ });
- if (QueryString["uionly"] == "1")
- {
- plugins = plugins.Where(p => p.DownloadToUI);
- }
+ if (QueryString["uionly"] == "1")
+ {
+ plugins = plugins.Where(p => p.DownloadToUI);
+ }
- return plugins;
- });
+ return Task.FromResult<IEnumerable<PluginInfo>>(plugins);
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs index b44970ea50..727237882b 100644 --- a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers /// </summary>
public class StudioHandler : BaseJsonHandler<IBNItem<Studio>>
{
- protected async override Task<IBNItem<Studio>> GetObjectToSerialize()
+ protected override Task<IBNItem<Studio>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers string name = QueryString["name"];
- return await GetStudio(parent, user, name);
+ return GetStudio(parent, user, name);
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers // Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Studio>()
{
- Item = await Kernel.Instance.ItemController.GetStudio(name),
+ Item = await Kernel.Instance.ItemController.GetStudio(name).ConfigureAwait(false),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs index d379b45fb4..7e85e5558c 100644 --- a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs @@ -11,13 +11,13 @@ namespace MediaBrowser.Api.HttpHandlers {
public class StudiosHandler : BaseJsonHandler<IEnumerable<IBNItem<Studio>>>
{
- protected override async Task<IEnumerable<IBNItem<Studio>>> GetObjectToSerialize()
+ protected override Task<IEnumerable<IBNItem<Studio>>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
- return await GetAllStudios(parent, user);
+ return GetAllStudios(parent, user);
}
/// <summary>
@@ -53,7 +53,7 @@ namespace MediaBrowser.Api.HttpHandlers }
}
- IEnumerable<Studio> entities = await Task.WhenAll<Studio>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); }));
+ IEnumerable<Studio> entities = await Task.WhenAll<Studio>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); })).ConfigureAwait(false);
return entities.Select(e => new IBNItem<Studio>() { Item = e, BaseItemCount = data[e.Name] });
}
diff --git a/MediaBrowser.Api/HttpHandlers/UsersHandler.cs b/MediaBrowser.Api/HttpHandlers/UsersHandler.cs index 1368735740..ad9ffec980 100644 --- a/MediaBrowser.Api/HttpHandlers/UsersHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UsersHandler.cs @@ -10,10 +10,7 @@ namespace MediaBrowser.Api.HttpHandlers {
protected override Task<IEnumerable<User>> GetObjectToSerialize()
{
- return Task.Run(() =>
- {
- return Kernel.Instance.Users;
- });
+ return Task.FromResult<IEnumerable<User>>(Kernel.Instance.Users);
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/YearHandler.cs b/MediaBrowser.Api/HttpHandlers/YearHandler.cs index dfde600e78..5e31c9689f 100644 --- a/MediaBrowser.Api/HttpHandlers/YearHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearHandler.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers /// </summary>
public class YearHandler : BaseJsonHandler<IBNItem<Year>>
{
- protected override async Task<IBNItem<Year>> GetObjectToSerialize()
+ protected override Task<IBNItem<Year>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers string year = QueryString["year"];
- return await GetYear(parent, user, int.Parse(year));
+ return GetYear(parent, user, int.Parse(year));
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers // Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Year>()
{
- Item = await Kernel.Instance.ItemController.GetYear(year),
+ Item = await Kernel.Instance.ItemController.GetYear(year).ConfigureAwait(false),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs index 6ce087f857..dcbbf6150e 100644 --- a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs @@ -11,13 +11,13 @@ namespace MediaBrowser.Api.HttpHandlers {
public class YearsHandler : BaseJsonHandler<IEnumerable<IBNItem<Year>>>
{
- protected override async Task<IEnumerable<IBNItem<Year>>> GetObjectToSerialize()
+ protected override Task<IEnumerable<IBNItem<Year>>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
- return await GetAllYears(parent, user);
+ return GetAllYears(parent, user);
}
/// <summary>
@@ -50,7 +50,7 @@ namespace MediaBrowser.Api.HttpHandlers }
}
- IEnumerable<Year> entities = await Task.WhenAll<Year>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); }));
+ IEnumerable<Year> entities = await Task.WhenAll<Year>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); })).ConfigureAwait(false);
return entities.Select(e => new IBNItem<Year>() { Item = e, BaseItemCount = data[int.Parse(e.Name)] });
}
|
