Linq to SQL: используя int? в качестве параметра в запросе - PullRequest
1 голос
/ 13 января 2010

Итак, у меня есть запрос, который выглядит примерно так:

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

Ничего особенного, возвращает результаты, которые мне нужны. Но когда у меня есть это в функции, где я передаю возможное нулевое значение как 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 ]

2 голосов
/ 13 января 2010
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 голос
/ 13 января 2010

У меня была эта проблема в прошлом. Обходной путь, который я нашел для работы, был следующим:

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 голосов
/ 13 января 2010

Попробуйте это:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...