2016-11-17 7 views
0

Кто-нибудь знает, как это перевести? Когда я попадал в отладчик, я получаю 3 разных запроса, а var содержит массив результатов. Я пытаюсь заменить эту строку методом, который вызовет хранимую процедуру, но я не понимаю, что должен делать запрос. Большое спасибоПреобразование linq в SQL

var restbl = 
     context.tbl_one.FirstOrDefault(d => d.qty < d.tbl_two.Count(a => !a.tbl_three.ust)) 
    ?? context.tbl_one.FirstOrDefault(d => d.qty > d.tbl_two.Count(a => !a.tbl_three.ust)); 


{SELECT 
`Extent1`.`id`, 
`Extent1`.`name`, 
`Extent1`.`qty`, 
`Extent1`.`cdate` 
FROM `tbl_one` AS `Extent1`} 

{SELECT 
`Extent1`.`id`, 
`Extent1`.`tbl_one_id`, 
`Extent1`.`tbl_three_id`, 
`Extent1`.`enabled` 
FROM `tbl_two` AS `Extent1`} 

{SELECT 
`Extent1`.`id`, 
`Extent1`.`ttid`, 
`Extent1`.`code`, 
`Extent1`.`cdate`, 
`Extent1`.`mdate`, 
`Extent1`.`prt`, 
`Extent1`.`ust` 
FROM `tbl_three` AS `Extent1`} 

var countToAdd = restbl.qty - context.tbl_two.Count(a => a.tbl_one_id == restbl.id && !a.tbl_three.ust); 
+0

Вы должны реорганизовать заявление LINQ в 'context.tbl_one.FirstOrDefault (г => firstCondition || secondCondition)'. Это будет один оператор SQL. –

+0

Но разве условия имеют смысл? Разве это не так, как 'qty! = Count'? –

+0

Спасибо @GertArnold, извините, мое понимание linq довольно плохое. Я всегда использую процедуры хранения и избегаю использования linq. Я знаю, многие говорили бы, что я должен использовать linq, но мне гораздо проще использовать прямой sql и просто создать метод для его вызова. Условия имеют смысл, программа работает нормально, я просто пытаюсь заменить edmx и linq. – carol1287

ответ

1

Вы можете использовать LINQPad или Linquer инструмент для легкого конвертирования Linq запрос SQL или наоборот. Они очень полезны при преобразовании сложных запросов.

0

Мое предположение было бы: (если вы используете MSSQL)

result= SELECT TOP 1 FROM tbl_one t1 WHERE t1.qty< (SELECT COUNT(*) FROM tbl_two t2 INNER JOIN tbl_three t3 ON t3.id=t2.tbl_three_id WHERE t3.ust = 0 AND t1.id=t2.tbl_one-id) 

if (result IS NULL) 
result= SELECT TOP 1 FROM tbl_one t1 WHERE t1.qty> (SELECT COUNT(*) FROM tbl_two t2 INNER JOIN tbl_three t3 ON t3.id=t2.tbl_three_id WHERE t3.ust = 0 AND t1.id=t2.tbl_one-id) 
+0

Большое вам спасибо @olealbers, это очень помогает, и я постараюсь сделать это, поскольку курение выходит из моей головы на данный момент :(. MySQL вместо MSSQL, но я думаю, синтаксис будет очень похож. – carol1287

+0

Вы знаете, что правильный запрос для var countToAdd? – carol1287

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

  • Нет связанных вопросов^_^