使用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))
答案 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,
});
}
如果您采用几种我认为分开的方法,那将使丑陋程度减轻一些。