1

我有两个查询应该做同样的工作:

1.

var date = DateTime.
var q = _entityManager.Websites.Include("OfflineSites")
        .Where(website => (website.LastCheck == null) || SqlFunctions.DateDiff("minute",  website.LastCheck.Value, date) >= website.CurrentPingTime);                  
q.QueryStrategy = QueryStrategy.DataSourceOnly;

var lst = q.Execute().Cast<Website>().ToList();

2.

 var query = new PassthruEsqlQuery(typeof(Website), @"Select * From Websites Where Id in (Select Id From (Select Id,CurrentPingTime,Abs(DateDiff(minute,CURRENT_TIMESTAMP,LastCheck)) LastCheckDiffNow From Websites )
                                                                as ret  Where CurrentPingTime <= LastCheckDiffNow)");
query.QueryStrategy = QueryStrategy.DataSourceOnly;

var result = query.With(_entityManager).Execute().Cast<Website>(); 
var lst = result.ToList()

然而,第一个像魅力一样工作但速度较慢,第二个返回空列表。这很奇怪,因为我检查了 SSMS 中的 sql 代码,它提供了很好的结果。这种行为的原因可能是什么。

4

1 回答 1

1

Are you sure that this PassthruEsqlQuery isn't actually throwing an error? The PassthruEsqlQuery requires ESQL, not SQL, and what you're showing doesn't look correct. There's some more information on the DevForce query here, and ESQL here.

于 2014-05-27T00:18:09.180 回答