C# Вложенный Linq выбирает, не возвращая все - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь выбрать информацию из нескольких таблиц через Linq. Запрос работает, если я беру последний запрос API from apis in Database.PluginApis where apis.PluginId == tenantPlugin.PluginId. Если я помещу запрос обратно, это приведет к ошибке System.Collections.Generic.KeyNotFoundException: The given key 'Name' was not present in the dictionary. Кто-нибудь сможет увидеть, что я делаю неправильно?

var results = (from tenantPlugin in Database.TenantPlugins
                           where tenantPlugin.TenantId == tenantId

                           select new TenantPlugin
                           {
                               PluginId = tenantPlugin.PluginId,
                               IsEnabled = tenantPlugin.IsEnabled,
                               TenantId = tenantPlugin.TenantId,
                               TenantPluginId = tenantPlugin.TenantPluginId,
                               Plugin = (from plugin in Database.Plugins
                                         where plugin.PluginId == tenantPlugin.PluginId
                                         select new Plugin
                                         {
                                             PluginId = plugin.PluginId,
                                             Name = plugin.Name,
                                             Description = plugin.Description,
                                             ImagePath = plugin.ImagePath,
                                             IsActive = plugin.IsActive,
                                             Apis = (from apis in Database.PluginApis
                                                         where apis.PluginId == tenantPlugin.PluginId                                                             
                                                     select new PluginApi
                                                     {
                                                         Name = apis.Name
                                                     }).ToList<PluginApi>()
                                         }).FirstOrDefault<Plugin>()
                           });

            return results.ToList();

1 Ответ

0 голосов
/ 16 февраля 2020

Кажется, у вас есть идеальный случай для использования метода Include(). Попробуйте:

var results = Database.TenantPlugins
              .Include(t => t.Plugin.Select(p => p.Apis))
              .Where(t => t.TenantId == tenantId);
...