代码之家  ›  专栏  ›  技术社区  ›  Paul Mignard

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

  •  1
  • Paul Mignard  · 技术社区  · 15 年前

    我有一个查询,看起来像这样:

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

    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 回复  |  直到 15 年前
        1
  •  1
  •   BFree    15 年前

    我以前也有过这个问题。我找到的解决办法是:

    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
  •  2
  •   mhenrixon    15 年前
    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;
    }
    
        3
  •  0
  •   Winston Smith    15 年前

    试试这个:

    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;
    }