I以下の2つのEFのモデルがあります:は「メソッド構文」の代わりの「照会構文」へ照会
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; }
}
私は唯一の場所のリストを返すようにデータベースを照会したいです関連付けられたRuleIdに基づいて、また指定されたApplicationIdとSiteIdに関連するレコードは、Exclusionsテーブルにはありません。最終的に、私が返す結果にそれらのルールを含まないように、アプリケーション/サイト固有の除外を考慮に入れてください。
私は次のクエリ使用して、これまでにこれを達成することができました:私は常に他のどこでもメソッド構文を使用し、一貫性を保つため
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;
は、クエリの構文を使用していますこの1つのだけの方法を持ってしたくありません私はMethod Syntaxを使って同じことを働かせることができませんでした。
あなたのコードでこのアプローチを試しましたが、間違った結果を返していましたが、2つの.Where()節ではなく、代わりに.Where(r => r.IsActive &&!r.Exclusions私は期待どおりの結果を得始めました。完璧、ありがとう!私はQuery構文に頼る前にこのアプローチを試したと確信していますが、少し間違っているはずです!再度、感謝します。 – marcusstarnes
.Where(x).Where(y)は.Where(x && y)と等しくなります。同じ結果が得られるはずです –