0

我有实体:

Entry
{
    public virtual ICollection<Content> Contents { get; set; }
}

我需要得到Entry包含过滤的Contents

var entryWithFilteredContents = dbContext.Entry.Single(). ???
    /*Load(entry=>entry.Contents) Where(content=> content.Value > 10)*/

现在,当我写作时,entryWithFilteredContents.Contents我希望只收到 Value 大于 10 的内容。我知道我可以得到一个var entry = db.Context.Entry.Single()然后var contents = entry.Contents.Where(content=> content.Value > 10),但这不能满足我的需要。

4

1 回答 1

1

这不是 EF 目前开箱即用的支持。

通常的解决方法是首先选择一个投影,如下所示:

var query = from e in dbContext.Entry
            select new { Entry = e, Related = e.Contents.Where(c => c.Value > 10) };
return query.Where(p => p.Related.Count > 0).Select(p => p.Entry);

当然,您也可以直接返回任何投影(并可能节省一些数据库往返),但需要非匿名类型才能使结果转义当前方法。

于 2012-05-23T01:02:12.297 回答