实体框架查询中的Getter评估

时间:2016-11-01 09:43:57

标签: c# entity-framework

我有以下getter:

public DateTime LastWeek {    
  get { return this.FirstWeek.AddDays(7 *this.WeeksCount); } 
}

以及以下查询

var query = from o in dataContext.Operations 
            where o.Date <= param.LastWeek && o.Date >= param.FirstWeek;

LastWeek getter会在查询执行之前得到评估,并且会在那里传递它的值,还是会被转换为类似DATEADD的东西(... - 所以它的逻辑会转移到查询中?

通过使用上述方法或将lastWeek值作为额外变量,很容易尝试:

var lastWeek = param.LastWeek;

但是我们必须检查每个查询 - 是否有可以应用的全局规则?

2 个答案:

答案 0 :(得分:0)

string queryText = (from o in dataContext.Operations 
            where o.Date <= param.LastWeek && o.Date >= param.FirstWeek).ToString();

您将看到将构建什么SQL查询。

答案 1 :(得分:0)

<div class="row" id="loginForm"> <p>Username : </p> <input type="text" class="form-control input" id="usr"> </div> get实现中的逻辑不会传输到SQL。但我相信只有在查询转换为SQL时才会在C#中进行评估。将一个断点放入getter中,看看它是否在执行查询之前被点击,但是在定义之后。

转换为SQL的东西是表达式,而不是实现(Linq映射了几个SQL调用,如LastWeekContains()等等。)