опускать обнуляемые типы в запросе linq-sql - PullRequest
1 голос
/ 01 февраля 2010

У меня есть такой код, пытающийся получить некоторые данные из таблицы Documents на основе некоторых переданных фильтров (ContentRef и TypeRef) ...

 public IQueryable<Document> GetFilteredDocuments(bool archived, int? ContentRef, int? TypeRef)
            {
                return from document in db.Documents
                       where document.IsArchived == archived
                       && (document.ContentRef == ContentRef)
                       && (document.TypeRef == TypeRef )
                       select document;
            }

если ContentRef или TypeRef равны нулю, я не хочу, чтобы он проверял, имеет ли оно значение null, я просто хочу, чтобы его игнорировали.

например, если оба значения равны нулю, мой метод должен вернуть эквивалент

 return from document in db.Documents
                       where document.IsArchived == archived
                       select document;

как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2010

Используя отложенное выполнение , вы можете построить свой запрос следующим образом, потому что выполнение происходит только при вызове GetEnumerator.

public IQueryable<Document> GetFilteredDocuments(bool archived, int? ContentRef, int? TypeRef)
{
    IQueriable<Document> docs = db.Documents.Where(d => d.IsArchived == archived);
    if (ContentRef != null)
       docs = docs.Where(d => d.ContentRef == ContentRef);
    if (TypeRef  != null)
       docs = docs.Where(d => d.TypeRef == TypeRef);
    return docs;
}
0 голосов
/ 01 февраля 2010

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

public IQueryable<Document> GetFilteredDocuments(bool archived, int? ContentRef, int? TypeRef)
{
    return from document in db.Documents
           where document.IsArchived == archived
           && (ContentRef == null || document.ContentRef == ContentRef)
           && (TypeRef == null || document.TypeRef == TypeRef )
           select document;
}

Когда ContentRef равен нулю, часть document.ContentRef == ContentRef не будет оцениваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...