C# Linq得到了奇怪的结果
我的数据库中有以下视图C# Linq得到了奇怪的结果,c#,linq,C#,Linq,我的数据库中有以下视图 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, C
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)
我已经将视图添加到我的EDMX中。我以这种方式查询视图:
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份第一个月的副本。有什么原因我看不到吗?我会更改视图,以便在没有唯一列的情况下有唯一列,并确保它映射为EF中的主键 如果这不是一个选项,请尝试将代码更改为
var submissions = from s in db.WSS_PortalSubmissions.AsNoTracking()
where s.ProducerID == ID
select s;
因此,EF不会跟踪实体,这将强制它只返回查询结果,而不尝试基于主键进行跟踪 我了解到EF不能很好地处理视图,因为它确实需要实体的键,而对于视图,它只会使用所有不可为null的列,这可能会导致奇怪的结果@juharr-除非您像映射表一样映射它,并指定使记录唯一的主键列。我会更改视图,以便在没有唯一列的情况下存在唯一列,并确保它映射为EF中的主键。如果这不是一个选项,请尝试将代码更改为
b.WSS\u PortalSubmissions.AsNoTracking()
,这样EF就不会跟踪实体,这将强制它只返回查询的准确结果,而不会尝试基于主键跟踪。@Igor AsNoTracking()对我来说非常适合。我已经完全忘记了EF的主要问题(已经停止练习将近一年了)。@Marc-很高兴我能帮上忙。