EF无法返回带有条件的项目,但是sql可以解释为什么?

时间:2014-11-04 16:54:58

标签: c# sql-server entity-framework entity-framework-4

我有这样的查询:

   int a= pgc.Fronts.Where(i => i.ItemCode == itemcode && i.PC == pc).Count()

PGC是我的dbcontext。项目代码是' 10414'并且pc值为null,结果为0

所以我将查询更改为sql命令:

/****** Script for SelectTopNRows command from SSMS  ******/
SELECT  [Id]
      ,[No]
      ,[ItemCode]
      ,[QtyRequest]
      ,[PC]
      ,[Date]
      ,[Type]
      ,[Line]
      ,[joint]
      ,[QTYIssue]
      ,[Recivedby]
  FROM [pgc].[dbo].[Fronts] where ItemCode='10414' and pc is null

它返回3条记录,如下所示:

enter image description here

为什么会这样?

 public partial class Front
    {
        public long Id { get; set; }
        public string No { get; set; }
        public string ItemCode { get; set; }
        public Nullable<double> QtyRequest { get; set; }
        public string PC { get; set; }
        public System.DateTime Date { get; set; }
        public string Type { get; set; }
        public string Line { get; set; }
        public string joint { get; set; }
        public double QTYIssue { get; set; }
        public string Recivedby { get; set; }
    }

1 个答案:

答案 0 :(得分:2)

如果我没记错(至少对于Linq2Sql),如果你想与空值进行比较,你应该使用Object.Equals

int a = pgc.Fronts.Where(i => 
               i.ItemCode == itemcode && Object.Equals(i.PC, pc)).Count();

这个&#34; bug&#34;似乎已在更高版本的Entity框架中修复。现在你可以使用:

int a = pgc.Fronts.Where(i => 
      i.ItemCode == itemcode && (i.PC == pc || (pc == null && i.PC == null)).Count();