我有運行從我的ASP.NET MVC6 EF7 web應用程序控制器的查詢一些麻煩......EF7上的Linq不適用於聯接和日期?
模型和的DbContext在此以前問:EF7 Incorrect configuration of the DBContext?
當我嘗試出現問題運行以下Linq查詢包含聯接的一對夫婦,並試圖從特定日期數據庫得到一些條目...
public IActionResult GetEntries(int year, int month, int day)
{
//_context.Database.SetCommandTimeout(180);
string dateTest = new DateTime(year, month, day).ToString("yyyy-MM-dd");
var results = (from c in _context.Comments
join r in _context.Reviews on c.ReviewId equals r.ReviewId
join f in _context.Films on c.ReviewId equals f.ReviewId
where c.Author.Equals("AuthorTest")
&& (c.Created.CompareTo(new DateTime(year, month, day, 0, 0, 0)) >= 0) && (c.Created.CompareTo(new DateTime(year, month, day, 23, 59, 59)) < 0)
&& !r.Status.Contains("Enabled")
select new
{
ReviewId = c.ReviewId,
ReviewStatus = r.Status,
Author = c.Author
});
var results2 = results.ToList();
return View(results2);
}
,我得到的是一個例外...
類型「System.Data.SqlClient.SqlException」的異常出現在 EntityFramework.Core.dll但在用戶代碼中沒有處理
其他信息:超時過期。在完成操作或服務器沒有響應之前,超時時間已過去 。
有趣的是....如果我沒有運行下面的行完全相同的查詢,然後它完美
&& (c.Created.CompareTo(new DateTime(year, month, day, 0, 0, 0)) >= 0) && (c.Created.CompareTo(new DateTime(year, month, day, 23, 59, 59)) < 0)
所以......超時異常的事情並沒有什麼太大對我來說很有意義,因爲一旦我刪除AND條件,就會返回數千條記錄。
另外,如果我是插在ASP.NET MVC5 EF6相同的查詢,查詢就像使用AND條件的魅力。
缺少什麼我在這裏?
最後,我想另一件事是建立一個單一的Linq查詢,沒有加入,與日期條件和它的作品也很好......
public IActionResult GetEntries(int year, int month, int day)
{
//_context.Database.SetCommandTimeout(180);
string dateTest = new DateTime(year, month, day).ToString("yyyy-MM-dd");
var results = (from c in _context.Comments
where c.Author.Equals("AuthorTest")
&& (c.Created.CompareTo(new DateTime(year, month, day, 0, 0, 0)) >= 0) && (c.Created.CompareTo(new DateTime(year, month, day, 23, 59, 59)) < 0)
select new
{
ReviewId = c.ReviewId,
Author = c.Author
});
var results2 = results.ToList();
return View(results2);
}
任何指針?
謝謝!
它工作正常!人......我被這些東西封鎖了,並嘗試了幾件事情,但並不認爲這種解決方案會起作用!非常感謝!欣賞它! – user3587624
不客氣,作爲未來的建議,嘗試使用運算符代替查詢中的方法調用。正如你所看到的,EF支持'Equals'和'Contains',但是有一些支持的方法非常有限。 – octavioccl
知道了!謝謝! – user3587624