簡體   English   中英

與Joins進入Linq查詢的SQL查詢

[英]Sql query with Joins into Linq query

我有這個查詢:

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 因此,是否可以僅使用模型執行SQL查詢? 我對linq join非常不滿意。

完全不要使用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代替)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM