所以我的查询看起来像这样:
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?错误...任何想法是我在这里做错了什么?
答案 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;
}