删除表达式树的部分

本文关键字:表达式 删除 | 更新日期: 2023-09-27 18:05:53

我有以下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查询和删除任何调用Fetch之前,我调用计数。

如果有人能告诉我这是怎么可能的,我会很感激的。由于

删除表达式树的部分

可以在运行时更改表达式树(通过在现有的基础上构建一个新的表达式树),因为诸如LINQ to SQL和实体框架之类的O/RM工具会不断地这样做,但这并不容易。随着。net 4.0的ExpressionVisitor类的引入,它变得更容易了,但仍然不要期望它是简单的。

将查询转换为Enumerable并像这样调用Count()是否有帮助:

var num = query.AsEnumerable().Count();

这将执行查询,然后对结果进行简单的Count(),而不是让Count()流到ExpressionTree中。