2010-01-13 2 views
1

Таким образом, у меня есть запрос, который выглядит примерно так:Linq to SQL: Использование int? в качестве параметра в запросе

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

Эта функция ничего не возвращает - Я проверил Params, чтобы убедиться, что они были правы, и действительно, parentClamID == неопределенных и до сих пор, никаких результатов. Если я изменяю clam.ParentClamID == parentClamID на clam.ParentClamID == null, это работает, поэтому я предполагаю, что использую int? неправильно ... любая идея, что я делаю неправильно здесь?

+0

Вот вопрос для обнуляемых типов в целом: http://stackoverflow.com/questions/586097/compare -nullable-types-in-linq-to-sql –

+0

Мне нравится, что вы запрашиваете моллюски. – CBono

ответ

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

Yay, что полностью сработало - спасибо! – onekidney

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

О, хорошо, спасибо! – onekidney

Смежные вопросы