NHibernate Linq Expression 动态投影

NHibernate Linq Expression dynamic projection

如何在使用 linq 表达式时动态更改生成的 sql 查询中的选定列? 每次执行查询时,它都是一个新会话。 即使我在第一次创建后将 MapExp 设置为 null,然后将 bool 值更改为 false,它仍然会在 sql 查询中生成列。 代码在 wpf 应用程序中运行。

    System.Linq.Expressions.Expression<Func<Entity, Model>> MapExp = x => new Model 
    {
        Id=xId,
        Count= LoadFormulaField ? x.Count: null,
        ...          
    };

var result = session.Query<Entity>().Select(MapExp))

您的问题似乎是作为表达式一部分的三元条件导致始终查询 "Count" 列。 避免这种情况的一种选择可能是:

var query = session.Query<Entity>();

IQueryable<Model> result = null;
if (LoadFormulaField)
{
    result = query.Select(x => new Model
    {
        Id = x.Id,
        Count = x.Count,
    });
}
else
{
    result = query.Select(x => new Model
    {
        Id = x.Id,
    });
}

如果你用我认为的几种方法分开,哪个会变得不那么难看。