在where子句Linq中使用可空字段

时间:2015-09-06 13:30:29

标签: c# sql-server linq

我有一个表Salary,我有一个可以为空的外键programmerId,我不知道如何编写我的查询。

我收到此错误

  

'Domain.Abstract.Repository.IProgrammerRepository'不包含'Where'的定义,也没有扩展方法'Where'可以找到接受类型'Cbc.Domain.Abstract.Repository.IProgrammerRepository'的第一个参数(是你错过了使用指令或程序集引用?)

我的代码:

if(entity.programmerId != null)
{ 
    var programmer= repositoryContainer
                    .ProgrammerRepository
                    .Where(entity.programmerId !=null && id == entity.programmerId)
                    .FirstOrDefault();
}

任何帮助?

更新

public partial class Salary : IEntity<long>
{ 
     public long Id { get; set; }
     public int Мonth { get; set; }
     public int Year { get; set; }
     public long? ProgrammerId {get; set} 
     public virtual Programmer {get;Set}
}

public partial class Programmer: IEntity<long> 
{
      public long Id { get; set; } 
}

我需要选择id == salary.ProgrammerId

的程序员

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用正确的lamba表达式? 它应该是这样的:

var programmer = repositoryContainer
                     .ProgrammerRepository
                     .Where(p => p.programmerId.HasValue && p.programmerId == id)
                     .FirstOrDefault();

Where()是来自System.Linq命名空间的扩展方法,它期望lambda表达式而不是普通表达式。这就是为什么你会收到这个错误。