基于关联属性的聚合来约束查询

时间:2010-07-13 05:09:38

标签: c# sql linq-to-entities

快速提问:这会为每个标记项触发一个查询吗?

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,所以看起来这可能不是一个好主意。

提前致谢,

1 个答案:

答案 0 :(得分:0)

你是完全正确的 - t.PostsEntityCollection(在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)