[英]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.