nhibernate - 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))
解决方案
您的问题似乎是三元条件作为表达式的一部分,导致始终查询“计数”列。避免这种情况的一种选择可能是:
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,
});
}
如果你用我认为的几种方法分开,那会变得不那么难看。
推荐阅读
- node.js - 在 ExpressJS 设置中没有出现 Favicon
- arrays - 斯威夫特:如何从洗牌数组中获取一项
- android - 如何在每个 Fragment 中拥有单独的 ViewModel 实例并在 Viewmodel 之间共享数据
- c# - C# 跨表单引用值
- regex - 与正则表达式匹配的问题
- python - 使用 numpy 将图像分成通道
- c++ - 仅在我退出应用程序后使用 cout.write() 函数在控制台上打印字符串
- python-3.x - 简单的 Python 代码不起作用(或者和字符串比较)
- python - 如何在类中注入代码并在运行时为类字段赋值?
- spring - 如何自动装配绑定接口?