Linq to SQL:使用int?作为查询中的参数

时间:2010-01-13 17:00:30

标签: c# linq linq-to-sql

所以我的查询看起来像这样:

var clams = from clam in Clams
            where clam.ClamTypeID == 143 &&
                  clam.ParentClamID == null
            select clam;

没有什么太疯狂,返回我需要的结果。但是当我在一个函数中使用它时,我将可能的null值作为int传递?我开始遇到一个问题。这是我的函数的样子:

public IQueryable<Clam> getAllClams(int clamTypeID, int? parentClamID)
{
     return from clam in Clams
            where clam.ClamTypeID == clamTypeID &&
                  clam.ParentClamID == parentClamID
            select clam;
}

这个函数什么都不返回 - 我检查了参数以确保它们是正确的,当然,parentClamID == null仍然没有结果。如果我将clam.ParentClamID == parentClamID更改为clam.ParentClamID == null它可以工作,所以我假设我正在使用int?错误...任何想法是我在这里做错了什么?

3 个答案:

答案 0 :(得分:2)

public IQueryable<Clam> getAllClams(int clamTypeID, int? parentClamID)
{
     return from clam in Clams
            where clam.ClamTypeID == clamTypeID &&
                  clam.ParentClamID == parentClamID.HasValue ? parentClamID.Value : null 
            select clam;
}

答案 1 :(得分:1)

过去我遇到过这个问题。我发现工作的解决方法是:

public IQueryable<Clam> getAllClams(int clamTypeID, int? parentClamID)
{
     return from clam in Clams
            where clam.ClamTypeID == clamTypeID &&
                  object.Equals(clam.ParentClamID, parentClamID)
            select clam;
}

答案 2 :(得分:0)

试试这个:

public IQueryable<Clam> getAllClams(int clamTypeID, int? parentClamID)
{
     var result = from clam in Clams where clam.ClamTypeID == clamTypeID select clam;

      if(parentClamID.HasValue) result = result.Where(c => c.ParentClamID == parentClamID);
      else result = result.Where(c => c.ParentClamID == null);

      return from clam in result select clam;
}