2

次のSQLコマンドがありますが、これはlinqに変換できません

select Distinct(fp.Parks_Id)
from ParkFeaturePark fp
Inner Join Parkfeatures feat on fp.ParkFeatures_Id = feat.Id
Inner Join Parks p On fp.Parks_Id = p.Id
where  p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =1 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =2 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =31     )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =42 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =106 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =118 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =4 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =6 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =10 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =18 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =22 )
    And p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =46 )

ここでのひねりは、ユーザーが選択した組み合わせを使用する必要があるということです..サンプルは

    p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =1 )
    AND p.Id In (Select Parks_Id from ParkFeaturePark where ParkFeatures_Id =4 )

または、ユーザーが選択したその他の組み合わせ..

返信いただきありがとうございます

4

2 に答える 2

2

ナビゲーション プロパティPark.ParkFeatureParksParkFeaturePark.Parkfeatures. (または、それらを作成できるようになります)。次に、次のことができます。

int[] featureIds = new { 1, 2, 31, 42, 106, 118, .. };

var query = from p in context.Parks
            where p.ParkFeatureParks
                   .SelectMany(pfp => pfp.Parkfeatures)
                   .All(feature => featureIds
                                   .Contains(id => feature.ParkFeatures_Id))
            select p.Parks_Id;
于 2013-06-10T07:37:44.907 に答える
2

これは答えではありませんが、良いスタイルのコーディング -

SELECT DISTINCT(fp.Parks_Id)
FROM dbo.ParkFeaturePark fp
JOIN dbo.Parkfeatures feat ON fp.ParkFeatures_Id = feat.Id
JOIN dbo.Parks p ON fp.Parks_Id = p.Id
WHERE p.Id IN (
        SELECT Parks_Id 
        FROM dbo.ParkFeaturePark 
        WHERE ParkFeatures_Id IN (1, 2, 31, 42, 106, 118, 4, 6, 10, 18, 22, 46)
    )
于 2013-06-10T06:17:15.520 に答える