Member 14063588 Ответов: 1

При использовании подзапроса внутри внутреннего запроса переменная, объявленная во внешнем запросе, становится недоступной для внутренних запросов внутри него.как устранить эту ошибку?


В моем проекте есть подзапросы, используемые внутри вложенного запроса. При использовании подзапроса внутри внутреннего запроса переменная, объявленная во внешнем запросе, становится недоступной для внутренних запросов внутри него.
Обнаружена ошибка при отладке вложенных запросов:
1. неизвестный столбец "Join3.appcategoryid" в "списке полей"
2. Extent1 неизвестный столбец '.taxonomyid' в 'предложении where'

public static dynamic GetTaxonomies(int businessUnitId, int memberId, string businessUnitType)
       {
           using (var db = new ProtocolManagementDatabaseEntities())
           {
               var taxonomies = (from taxonomy in db.taxonomies
                                 join businessUnitTaxonomy in db.businessunittaxonomies 
                                 on taxonomy.taxonomyid equals 
                                  businessUnitTaxonomy.taxonomyid
                                 let TaxonomyID = taxonomy.taxonomyid
                                 where businessUnitTaxonomy.businessunitid == 
                                 businessUnitId
                                 select new
                                 {
                                     TaxonomyId = taxonomy.taxonomyid,
                                     TaxonomyName = taxonomy.taxonomyname,
                                     preferenceValue = db.userpreferences.Where(x => 
                                     x.entitycolumnvalue == TaxonomyID &&
                                     x.memberid == memberId && 
                                     x.entitytablename == "Taxonomy" && 
                                     x.sequencenumber == 5)
                                     .Select(x => x.isvisible).FirstOrDefault()

                                     AppCategory = (from appCategory in 
                                     db.appcategories
                                     join appCategoryTaxonomy in 
                                     db.appcategorytaxonomies on 
                                     appCategory.appcategoryid equals 
                                     appCategoryTaxonomy.appcategoryid
                                     let AppCategoryID = appCategory.appcategoryid
                                     where appCategory.parentappcategoryid == null &&
                                                   
                                 appCategory.appcategorylevel.Equals("AppCategoryName")
                                                    && 
                                 appCategoryTaxonomy.taxonomyid == TaxonomyID &&
                                 appCategoryTaxonomy.businessunitid == businessUnitId
                                 orderby appCategory.name ascending
                                 select new
                                   {
                                     AppCategoryId = appCategory.appcategoryid,
                                     AppCategoryName = appCategory.name,
                                     AppCategoryDeletionEnable = 
                                     db.appcategories.Where(x => 
                                     x.parentappcategoryid == 
                                      AppCategoryID).FirstOrDefault() != null ? true : 
                                     false
                                     SubCategory = from subCategory in db.appcategories
                                     let SubCategoryID = db.appcategories.Where(x => 
                                     x.appcategoryid == 
                                     subCategory.appcategoryid).Select(x => 
                                     x.appcategoryid).FirstOrDefault()
                                     where subCategory.parentappcategoryid == 
                                     AppCategoryID && 
                                     subCategory.businessunitid == businessUnitId
                                     orderby subCategory.name ascending
                                     select new
                                         {
                                           AppCategoryId = subCategory.appcategoryid,
                                           AppCategoryName = subCategory.name,
                                           Description = subCategory.description,
                                           IsGlobal = subCategory.isglobal,
                                           IsEnable = subCategory.isenable,
                                           ParentAppCategoryID = 
                                          appCategory.parentappcategoryid,
                                                                          
                                          SubCategoryDeleteEnable = 
                                          db.protocolappcategories.Where(x => 
                                          x.appcategoryid == SubCategoryID)
                                                                          
                                          .FirstOrDefault() != null ? true : false,

                                                                          
                                            AppCategoryLevel = 
                                            subCategory.appcategorylevel,
                                            IsExpand = false,
                                                                      }
                                                    }).ToList()
                                 }).ToList();
               return taxonomies;
           }
       }


Что я уже пробовал:

Обнаружена ошибка при отладке вложенных запросов:
1. неизвестный столбец "Join3.appcategoryid" в "списке полей"
2. Extent1 неизвестный столбец '.taxonomyid' в 'предложении where'

CHill60

Сгладить структуру запросов, чтобы не было вложенных запросов?

Member 14063588

Я не в состоянии понять ответ, который вы дали, пожалуйста, объясните его

CHill60

Упростите свой запрос, чтобы не использовать подзапросы или вложенные запросы. Соберите необходимую информацию из первого запроса, а затем передайте ее следующему. Это облегчит понимание вашего кода ... просто потому что ты мочь делай что-то, но это не значит, что ты ... должен

Member 14063588

Не могли бы вы помочь мне упростить этот запрос?

CHill60

Извините, нет - у меня здесь нет Visual Studio, и это слишком сложно, чтобы пытаться сделать это на глаз. Другие могут увидеть это, хотя теперь, когда я отредактировал ваш пост.
Я заметил, что вы удалили предварительные теги, которые я добавил к вашему сообщению. Имейте в виду, что если ваш код правильно отформатирован (как сейчас), его легче читать участникам ... и если это легче читать больше людей скорее всего попытаются помочь

1 Ответов

Рейтинг:
0

Gerry Schmitz

Никто не собирается смотреть на это и "делать свою работу".

Это дерьмовый запрос, который вам нужно упростить (то есть "сгладить"), создав "промежуточные" запросы, которые питают друг друга (используя "временные" результаты / коллекции, если вам нужно).

Вы не можете исправить то, чего не понимаете. Как вы это "понимаете"? Путем упрощения.

То, что у вас есть, - это "технический долг", за который вы теперь должны "платить" (или продолжать "путаться").

Да... и это займет "несколько часов".