2016-11-17 5 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

(あなたはMSSQLを使用すると仮定した場合)。これは1つのSQLステートメントになります。 –

+0

しかし条件は意味がありますか?それは 'qty!= count'と同じではありませんか? –

+0

ありがとう@ガート・アーノルド、申し訳ありませんが、私のlinqの理解はかなり悪いです。私は常にストアプロシージャを使用し、linqの使用を避けます。私はlinqを代わりに使用すべきだと多くの人が知っていることを知っていますが、私はストレートSQLを使用し、それを呼び出すメソッドを作成するほうがはるかに簡単です。条件は意味をなさない、プログラムは正常に動作し、私はちょうどedmxとlinqを置き換えようとしています。 – carol1287

答えて

1

あなたは簡単にSQLまたはその逆に、あなたのLINQクエリを変換するためのLINQPadまたはLinquerツールを使用することができます。複雑なクエリの変換に非常に役立ちます。

0

私の仮定は次のようになります。あなたが `context.tbl_one.FirstOrDefault(D => firstCondition || secondCondition)`へのLINQ文をリファクタリングする必要があり

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

ありがとうございました。これは大きな助けになりました。喫煙が現時点で私の頭の中から出てくるように試みます:(。 MSSQLの代わりにMySQLを使用しますが、構文は非常に似ていると思います。 – carol1287

+0

var countToAddの正しいクエリを知っていますか?ありがとう – carol1287