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,
});
}
如果你用我认为的几种方法分开,哪个会变得不那么难看。
如何在使用 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,
});
}
如果你用我认为的几种方法分开,哪个会变得不那么难看。