NHibernate Linq Expression动态投影

时间:2018-08-24 20:05:19

标签: nhibernate

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

1 个答案:

答案 0 :(得分:0)

作为表达式的一部分,您的问题似乎是三元条件的,从而导致始终查询“ 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,
    });
}

如果您采用几种我认为分开的方法,那将使丑陋程度减轻一些。