2014-10-07 2 views
0

LINQ 쿼리에 조인 :SQL 쿼리 내가이 쿼리를

내가이가 C#에서

을 (responseInstanceID가있는 경우 부울 값을 가져) LINQ 쿼리 (C 번호)로 변환 할 필요가

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" 

구조 :

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 조인과 함께 나는 심하게 오전 (

답변

0

탐색 속성이 작업 할 수 있도록, 모든 절을 조인을 사용하지 마십시오.

var ratingLogicVersion = "4.8"; 

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

참고가 더 Distinct 어떤 필요하지 않습니다, 때문에 결과를 곱한 조인이 사라졌습니다 (EXISTS으로 바뀜).

+0

예, 이것에 대해 생각하고 있습니다. 감사합니다. 감사합니다. – demo