c# - Linq to Entities 奇怪的结果

标签 c# linq

我的数据库中有以下 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/

相关文章:

c# - Process.GetProcesses(); 之间有什么关系?任务管理器中显示什么?

c# - 如何使用 group by 数据创建 Left Join

c# - Cast<T> 的实现不是针对 Linq 的不可变风格吗?

c# - 先按大写字母排序

c# - 在控制台应用程序中覆盖 txt 文件 C# 中的输出

c# - 每次解析具有不同依赖实现的同一个类的多个实例

c# - 在类似 StringBuilder 的 C 模块中增加多少缓冲区?

c# - 使用 .Net 2.0 的 VS 2012 中的 Microsoft.Office.Interop.Outlook 2010 引用

.net - Lookup Class 在 LINQ 中,底层数据结构是什么?

c# - 使用字典的 Linq 奇怪行为