【问题标题】:Get entity with filtered inner entities - EF获取具有过滤内部实体的实体 - EF
【发布时间】:2012-05-23 00:14:14
【问题描述】:

我有实体:

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

我需要获取包含过滤的ContentsEntry

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=&gt; content.Value &gt; 10) 但这不能满足我的需求。

【问题讨论】:

    标签: c# .net database entity-framework linq-to-entities


    【解决方案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);
    

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

    【讨论】:

    • 感谢您的出色回答。在那一刻,我正在尝试使用Join 扩展方法,但到目前为止没有任何效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多