2015-10-20 2 views
-1

Я новичок в linq, поэтому заранее извиняюсь, если это немой вопрос. Я унаследовал следующий запрос, и он не дает правильных результатов, чтобы исправить это. Я должен понять, что он делает. Вот запрос, если кто-то может объяснить мне, что он делает (также возможно исправить), который будет очень признателен.Оператор LINQ с условным выбором из таблицы

**using (var dbCtx = new TLMDbContext()) 
    { 
    var dvps = dbCtx.tblDVPTests.Where(x => x.DVPID == 2176); 
// these 2 following if conditions doesnt bring correct result sets 
    if (dvpMasterPhaseId.HasValue) 
    { 
     dvps = dvps.Where(x => x.tblDVPPhases.All(p => p.DVPMasterPhaseID ==255)); 
    } 
    if (dvpMasterVariantId.HasValue) 
    { 
     dvps = dvps.Where(x => x.tblDVPPhases.All(p => p.tblDVPVariants.All(v=>v.DVPMasterVariantID==681))); 
    } 
}** 

UPDATE Я хочу, чтобы этот следующий запрос должен быть записан в LINQ, и если один из вас, ребята, скажите мне, что случилось с запросом LINQ выше, что будет большим.

выберите * из tblDVPTest внутреннее соединение tblDVPPhase на tblDVPTest.DVPTestID = tblDVPPhase.DVPTestID где dvpid = 2176 и tblDVPPhase.DVPMasterPhaseID = 255 Здесь находится и с условием

выберите * из tblDVPTest внутреннее соединение tblDVPPhase на tblDVPTest.DVPTestID = tblDVPPhase.DVPTestID внутреннее соединение tblDVPVariant на tblDVPPhase.DVPPhaseID = tblDVPVariant.DVPPhaseID где dvpid = 2176 и tblDVPPhase.DVPMasterPhaseID = 255 и tblDVPVariant.DVPMasterVariantID = 681

+0

Нам определенно нужна дополнительная информация, чем эта помощь. Вы говорите, что условия не приносят правильных результатов. Что вы ожидаете? Что на самом деле происходит? –

+0

, если вы, ребята, можете помочь мне понять, что происходит, это будет здорово. Идея - это для первого фильтра – user2954221

+0

. Я перепробовал это в следующем http://stackoverflow.com/questions/33301930/linq-delima-to-convert-sql-into-linq – user2954221

ответ

0

s Я могу понять из кода, вы используете инфраструктуру сущности для взаимодействия с базой данных. Ниже приведено объяснение на высоком уровне:

  1. Создать объект DbContext.
  2. Выделить все, начиная с таблицы tblDVPTests в переменной dvps где столбец DVPID таблицы tblDVPTests соответствует значению переменной dvpNum.
  3. Если переменная с нулевым значением dvpMasterPhaseId не равна нулю, тогда выберите только те значения от dvps, где ссылочная таблица tblDVPPhases имеет все строки с столбцом DVPMasterPhaseID соответствие значений с переменной dvpMasterPhaseId значение. Результат магазина: dvps. Если переменная dvpMasterPhaseId равна null, пропустите этот шаг.
  4. Если обнуляемым переменная dvpMasterVariantId не равно нулю, то выбрать только те значения из dvps, где ссылается таблица tblDVPPhases имеет все строки с колонкой DVPMasterVariantID согласования значения с переменной dvpMasterVariantId значением. Результат магазина: dvps. Если переменная dvpMasterVariantId равна null, пропустите этот шаг.
  5. Dispose Объект DbCOntext.

Замечание: между таблицей tblDVPTests и tblDVPPhases есть отношение внешних ключей.

Чтобы решить проблему, прежде всего, вы должны сообщить нам, что именно вы ожидаете от результата.

+0

Спасибо. Позвольте мне посмотреть, что я ожидаю в результате, и тогда я спрошу, как я могу это достичь. – user2954221

Смежные вопросы