関連する子エンティティの読み込みとフィルタリングの最良の方法を探しています。私はうまくいくものを持っていますが、私が望むものを達成するためにはそれが最良か、あるいは正しい方法であるかどうかは分かりません。以下の作業コードの例。長所と短所は素晴らしいだろう!ありがとう!エンティティフレームワークでの関連エンティティのフィルタリング
public Site Find(int siteID)
{
// Can't use include here, not possible to filter related (child) entities
// return _context.Sites.Where(x => x.ID == siteID)
// .Include("SiteLoggers")
// .Where(x => x.Deleted == false)
// .FirstOrDefault();
var site = _context.Sites.Where(x => x.ID == siteID).FirstOrDefault();
if(site != null)
{
site.SiteLoggers = site.SiteLoggers.Where(x => x.SiteID == siteID &&
x.Deleted == false)
.ToList();
}
return site;
}
EDIT:
追加POCOS
public class Site
{
public int ID { get; set; }
public int LocationID { get; set; }
public bool Active { get; set; }
public bool Deleted { get; set; }
public string Name { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<SiteLogger> SiteLoggers { get; set; }
public virtual ICollection<LinkDcSite> DcSiteLinks { get; set; }
}
public class SiteLogger
{
public int ID { get; set; }
public int UID { get; set; }
public int SiteID { get; set; }
public int LocationID { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public bool Deleted { get; set; }
public virtual Site Site { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<SiteLoggerSensor> SiteLoggerSensors { get; set; }
public virtual ICollection<LinkLoggerSiteLogger> LinkLoggerSiteLogger { get; set; }
}
こんにちは。あなたの例では、クエリは単にサイトではなくSiteLoggersのコレクションを返しますが、私はSiteLoggersコレクションを介してサイトを取得できると言っていますか?私はvar siteLoggers = _context.SiteLoggers.Where(x => x.SiteID == siteID &&!x.Deleted); サイトサイト= null; if(siteLoggers!= null) site = siteLoggers.FirstOrDefault()。サイト。 リターンサイト。 – Matt
もちろん、そうすることはできますが、そうすることはできません。 DbContextまたはObjectContextを使用していますか?事は少し違う。 eager loading、lazy loading、explciit loadingについて読むべきです。また、あなたのモデルによって異なります。サイトとサイトログの関係は存在しますか?どのような関係。完全な答えを得るために欠けている情報がたくさんあります – JotaBe
こんにちは。私はDbContextを使用しています。はい、あなたはPOCOで見ることができるような関係があります。私は専門家ではありませんが、熱心で怠け者で明示的な読み込みについていくつかの研究を行いました。だから私はもともとincludeメソッドを使っていたのですが、それは5人程度しかないということを考えれば、関連するSiteLoggersを熱心に読み込むのは良い考えでしたか? – Matt