我有以下2種EF型號:如何這個LINQ轉換爲實體查詢到「方法語法」而不是「查詢語法」
public class Rule
{
public int Id { get; set; }
public string RuleValue { get; set; }
public bool IsActive { get; set; }
public List<Exclusion> Exclusions { get; set; }
}
public class Exclusion
{
public int Id { get; set; }
public int ApplicationId { get; set; }
public int SiteId { get; set; }
public int RuleId { get; set; }
[ForeignKey("RuleId")]
public Rule Rule { get; set; }
}
我想查詢數據庫返回一個列表,但只有在Exclusions表中沒有相關記錄,基於相關的RuleId以及指定的ApplicationId和SiteId。最終,考慮到任何應用程序/網站特定的排除事項,以便在我返回的結果中不包括這些規則。
我已經能夠做到這一點至今使用以下查詢:
IQueryable<Rule> query =
from r in context.Rule
where r.IsActive && !(from e in context.Exclusion
where e.ApplicationId == applicationId &&
e.SiteId == siteId
select e.RuleId)
.Contains(r.Id)
select r;
我總是使用方法語法其他地方和一致性,不希望有使用查詢語法僅這一個方法,但我無法使用Method Syntax獲得相同的功能。
我按照你的代碼嘗試了這種方法,但是它返回的結果不正確,但是當我改變它時,那裏不是兩個.Where()子句,而是使用了.Where(r => r.IsActive &&!r.Exclusions .Any(等))然後我開始把結果返回到我的預期。很好,謝謝!我確信在使用查詢語法之前我已經嘗試了這種方法,但是我一定會弄錯它的!再次感謝。 – marcusstarnes
。其中(x).Where(y)等於.Where(x && y)。你應該得到相同的結果 –