我的数据库中有以下 View
SELECT YEAR(Received) AS YEAR,
MONTH(Received) AS MONTH,
LEFT(DATENAME(MONTH, Received), 3) AS MMM,
COUNT(Received) AS Submissions,
COUNT(Quoted) AS Quotes,
COUNT(Bound) AS Binders,
COALESCE (SUM(BndPremium), 0) AS Premium,
ProducerID
FROM dbo.Quote AS Q WITH (NOLOCK)
WHERE (Received >= DATEADD(year, - 1, GETDATE()))
GROUP BY ProducerID, YEAR(Received), MONTH(Received), DATENAME(MONTH, Received)
我已将 View 添加到我的 EDMX。我以这种方式查询 View :
var submissions = from s in db.WSS_PortalSubmissions
where s.ProducerID == ID
select s;
然而,“提交”中的结果是第一个月的 12 个副本,而不是过去 12 个月的结果。今天在 Linq 中运行查询,我得到了 2016 年 4 月的 12 个结果副本。如果我在 SSMS 中运行查询,我得到了预期的结果,即过去 12 个月的列表。
我试过 .ToList()、.ToArray(),甚至尝试对结果进行一些排序,但它没有改变。它只给我第一个月的12份。有什么我看不到的原因吗?
最佳答案
我会更改 View ,以便有一个唯一的列(如果还没有的话),并确保它被映射为 EF 中的主键。
如果这不是一个选项,请尝试将代码更改为
var submissions = from s in db.WSS_PortalSubmissions.AsNoTracking()
where s.ProducerID == ID
select s;
以便 EF 不跟踪实体,这应该强制它只返回查询的准确结果,而不尝试基于主键进行跟踪。
关于c# - Linq to Entities 奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394609/