快速提问:这会为每个标记项触发一个查询吗?
public static IQueryable<Tag> WhereTagHasLivePosts(this IQueryable<Tag> q)
{
return q.Where(t => t.Posts.Where(p => DateTime.Now >= p.PublishTime && p.IsPublished == true).Count() > 0);
}
.Posts.Wost实际上是IEnumerable的扩展,而不是IQueryable,所以看起来这可能不是一个好主意。
提前致谢,
丽
答案 0 :(得分:0)
你是完全正确的 - t.Posts
是EntityCollection
(在Linq-to-SQL中,它将是EntitySet
)并因此实现IEnumerable
而不是IQueryable
。
虽然该线程是关于Linq-to-SQL的,但它的逻辑与此相同:
http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
迈克说:达明回应:[...] EntitySet,它不是IQueryable。
这可以防止在任何现实场景中使用linq2sql。
考虑:
client.Orders.Where(O =&GT; o.Total&GT; 1000); //将linq运行到对象而不是linq到sql
entiy框架中存在同样的问题。
@Mikeon:EntitySet已加载 内存中的集合 关系。
如果您想要所有订单 特定客户的总数是 大于100然后你执行:
db.Orders.Where(o =&gt; o.Client == 客户&amp;&amp; o.Total&gt; 1000)