我有以下LINQ查询:
var query = session.Query<Event>()
.Fetch(e => e.Venue); // Fetch is an IQueryable extension which does a join
// Code needed here to remove the fetch part
var num = query.Count(); // This then hits the database
不幸的是,这会引发错误,因为count方法不支持fetch。在这个阶段,我确定你在想为什么我不删除获取部分。但是我简化了我的例子,这是不可能的。理想情况下,我希望能够做的是导航LINQ查询的表达式树,并在调用Count之前删除对Fetch的任何调用。
如果有人能证明这是可能的,我会很感激。感谢
答案 0 :(得分:3)
可以在运行时更改表达式树(通过从现有树中构建一个新表达式树),因为诸如LINQ to SQL和Entity Framework之类的O / RM工具会不断地执行此操作,但这并不容易。引入ExpressionVisitor
类的.NET 4.0变得更容易,但仍然不希望它变得简单。
以下是article,其中显示了一个示例。
答案 1 :(得分:0)
将查询转换为Enumerable并在此处调用Count()会有所帮助:
var num = query.AsEnumerable().Count();
这将执行查询,然后在结果上生成一个简单的Count(),而不是让Count()流入ExpressionTree。