2009-08-16 8 views
1

私はLINQに翻訳したいと思っている非常に扱いにくいSQL-Queryで作業しています。このSQLをLINQに変換できますか?

あなたは可能でしょうか?

WITH ConditionalChecks AS (
    SELECT c.ItemId FROM ConditionalProperties c, Properties p 
    WHERE c.PropertyId = p.Id AND c.IsChecked = 1 AND (

     (p.SystemName = 'eatable') OR 
     (p.SystemName = 'diy') 

    ) 
), 

ConditionalCount AS (
    SELECT ItemId, Count(*) AS NumTrue FROM ConditionalChecks 
    GROUP BY ItemId 
), 

ItemResult AS (
    SELECT * FROM ConditionalCount c, Items i 
    WHERE c.ItemId = i.Id 
) 

SELECT * FROM ItemResult 
WHERE NumTrue = 2 

ヒントありがとうございます!

答えて

3

LINQを使用すると、このようなクエリを簡単に集約できます。

var conditionalChecksQuery = 
    from c in db.ConditionalProperties 
    where c.IsChecked == 1 // or 'true', if boolean 
    join p in db.Properties on c.PropertyId equals p.Id 
    where p.SystemName == "eatable" || p.SystemName == "diy" 
    select c.ItemId; 

var conditionalCountQuery = 
    from c in conditionalChecksQuery 
    group c by c.ItemId into cGrouped 
    select new { ItemId = cGrouped.Key, NumTrue = cGrouped.Count() }; 

var itemResultQuery = 
    from c in conditionalCountQuery 
    join i in db.Items on c.ItemId equals i.Id 
    select new { Item = i, NumTrue = c.NumTrue }; 

var finalQuery = 
    from result in itemResultQuery 
    where result.NumTrue == 2 
    select result; 
+0

ベン、ありがとう、ちょうど私が探していた。私はちょうどこれを、おかげでから学んだ:) –

+0

助けになることを喜んで:-) –

+0

ベン私は疑いがある。私たちはLINQを使用している場合は、すべてを別々のobjに保ち、操作を実行したいと思います。実行速度が低下します.SSQLプロシージャーと比較すると、 – anishMarokey

1

は、私はこのような何かが、これはSQLで

Select * FROM (
    Select c.ItemID, Count(*) As NumTrue 
    FROM ConditionalProperties c, Properties p 
    WHERE c.PropertyId = p.Id AND c.IsChecked = 1 AND (
    (p.SystemName = 'eatable') OR 
    (p.SystemName = 'diy') 
    GROUP BY ItemID 
) AS ConditionalCount 
INNER JOIN Items AS I 
ON ConditionalCount.ItemID = I.id 
WHERE ConditionalCount.NumTrue = 2 

動作するはずです、私はあなたがLINQをしていたと思って、SQLを望んでいた理由は分からないと思いますが、これはSQLのはるかに単純な形であるべき複数のクエリとまったく同じことをします。

+0

私はこれが本当にLINQかどうか疑問ですか?それは、OPが求めているものです... –

+1

私は見ているSQLのように見えないので、私の脳は何らかの理由でそれを切り替えたと思う。奇妙な。 – Kibbee

+0

これは機能しますが、まったく同じSQLを書くもう1つの方法です。 LINQの翻訳を探しています:) –