【问题标题】:How to translate to Linq Expression如何翻译为 Linq 表达式
【发布时间】:2013-06-05 17:59:38
【问题描述】:

我有以下无法翻译成 linq 的 sql 命令

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 )

或用户选择的任何其他组合..

感谢回复

【问题讨论】:

    标签: sql linq lambda sql-to-linq-conversion


    【解决方案1】:

    假设您有导航属性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;
    

    【讨论】:

    • 感谢 Gert,但我的问题是,我想获取那些将所有 featureId 传递给它的 Park_id,比如...我想要那些具有 1、2、10 featureId 的 ID。而不是那些只有 1 和 2 个 featureId 的公园。对不起我的英语不好。希望你明白我的意思。
    【解决方案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)
        )
    

    【讨论】:

    • 感谢 devart,不知怎的给了我一个想法
    • 我正在考虑使用 Predicate Builder 使“where”动态化.. 但是不使用它可以做到吗?
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2022-10-20
    • 2020-09-29
    相关资源
    最近更新 更多