加入和包含在Entity Framework中

29

我有一个linq to entities的查询。问题在于,尽管我已经为它包含了一个东西,但它似乎没有加载“标签”关系。如果我不加入标签,它可以正常工作,但我需要这样做。

            var items = from i in db.Items.Include("Tags")
                        from t in i.Tags
                        where t.Text == text
                        orderby i.CreatedDate descending
                        select i;

有没有其他方法来询问这个查询?也许可以拆分它或者做些其他的处理吗?

1个回答

50
包含(Include)与筛选条件(where)存在矛盾。Include 表示“加载所有标签”,而 where 表示“加载部分标签”。当查询与 Include 矛盾时,查询将始终获胜。
要返回具有至少一个标签等于文本的任何项目的所有标签:
        var items = from i in db.Items.Include("Tags")
                    where i.Tags.Any(t => t.Text == text)
                    orderby i.CreatedDate descending
                    select i;

(未经测试,因为我没有您的数据库/模型)

这里有一本关于LINQ的非常好的免费书籍:C# 3.0中的查询表达式和支持功能


有没有其他的写法建议,这样我就可以获取标签并对它们进行条件判断。在普通的SQL中,这可能会比较简单。 - Olaj
你想要从至少包含一个标签为文本的任何项目中,包括所有标签吗? - Craig Stuntz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接