【问题标题】:Sql query with Joins into Linq query带有连接到 Linq 查询的 Sql 查询
【发布时间】:2014-12-01 17:20:16
【问题描述】:

我有这个问题:

SELECT DISTINCT 
    responseInstanceID
FROM 
    rRuleTriggerResponse rtr
LEFT JOIN 
    rRuleTrigger rt ON rtr.ruleTriggerID = rt.ruleTriggerID
LEFT JOIN 
    rRule r ON rt.ruleTriggerID = r.ruleTriggerID
WHERE 
    r.ratingLogicVersion = '<<RatingLogicVersion>>' // RatingLogicVersion - e.g. "4.8"

我需要将其转换为 Linq 查询(C#)(如果 responseInstanceID 存在则获取布尔值)

在 C# 中我有这个结构:

public partial class rResponseInstance : BaseEntity
    {
        public rResponseInstance()
        {
            this.rRuleTriggerResponses = new List<rRuleTriggerResponse>();
        }

        [Key("rResponseInstance", true)]
        public int responseInstanceID { get; set; }
        [Key("rQuestionInstance")]
        public int questionInstanceID { get; set; }
        public virtual ICollection<rRuleTriggerResponse> rRuleTriggerResponses { get; set; }
    }

 public partial class rRuleTriggerResponse : BaseEntity
    {
        [Key("rRuleTriggerResponse", true)]
        public int ruleTriggerResponseID { get; set; }
        [Key("rRuleTrigger")]
        public int ruleTriggerID { get; set; }
        [Key("rResponseInstance")]
        public int responseInstanceID { get; set; }
        public virtual rResponseInstance rResponseInstance { get; set; }
        public virtual rRuleTrigger rRuleTrigger { get; set; }
    }

public partial class rRuleTrigger : BaseEntity
    {
        public rRuleTrigger()
        {
            this.rRules = new List<rRule>();
            this.rRuleTriggerResponses = new List<rRuleTriggerResponse>();
        }

        [Key("rRuleTrigger", true)]
        public int ruleTriggerID { get; set; }
        public virtual ICollection<rRule> rRules { get; set; }
        public virtual ICollection<rRuleTriggerResponse> rRuleTriggerResponses { get; set; }
    }

public partial class rRule : BaseEntity
    {
        [Key("rRule", true)]
        public int ruleID { get; set; }
        [Key("rRatingLogic")]
        public string ratingLogicVersion { get; set; }
        [Key("rRuleTrigger")]
        public int ruleTriggerID { get; set; }
        public virtual rRatingLogic rRatingLogic { get; set; }
        public virtual rRuleTrigger rRuleTrigger { get; set; }
    }

对于查询,我只有一个对象 - rResponseInstance model 。那么,是否可以仅使用 model 执行 SQL 查询?我对 linq 连接很不满意。(

【问题讨论】:

    标签: c# sql sql-server linq collections


    【解决方案1】:

    完全不要使用 join 子句,让导航属性完成工作:

    var ratingLogicVersion = "4.8";
    
    var query = 
       db.rRuleTriggerResponses
         .Where(resp => resp.rRuleTrigger.rRules
                            .Any(rule => ruler.ratingLogicVersion == ratingLogicVersion))
         .Select(resp => resp.responseInstanceID);
    

    请注意,您不再需要 Distinct,因为与结果相乘的联接已消失(由 EXISTS 代替)。

    【讨论】:

      猜你喜欢
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多