首页 > 解决方案 > NHibernate Linq 表达式动态投影

问题描述

使用 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))

标签: nhibernate

解决方案


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

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,
    });
}

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


推荐阅读