Фильтрация по 1 логическому значению из 2 значений из интерфейса - PullRequest
2 голосов
/ 16 июня 2011

Допустим, у меня есть свойство, которое IsRegistrationCompleted.

У меня есть 2 флажка в интерфейсе фильтра, который говорит:

  1. Завершено
  2. Не завершено

Если оба отмечены, то извлекаются как полные, так и неполные пользователи.Если установлен флажок Complete, будут получены только завершенные пользователи.Если ни один не проверен, ни один не получен.

Как поместить эту логику в linq?

Я установил свои флажки следующим образом:

public bool IsCompleted { get; set; }
public bool IsInCompleted { get; set; }

Мой метод:

private void GetUsers()
{
        //TODO: Apply filters here.
        var query = _context.GetUsers(); //Returns IQueryable<User>

        _context.Load(query, LoadBehavior.MergeIntoCurrent, LoadApplicantsCompleted, null);
}

Использование silverlight с сервисом WCF Ria.

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

Примерно так будет работать.Я думаю, что было бы трудно читать, если бы вы имели всю следующую логику в одном выражении Where

if(IsCompleted && IsInCompleted)
{
   query = query;
}
else if(IsCompleted)
{
  query = query.Where(u => u.IsRegistrationCompleted);
}
else if(IsInCompleted)
{
    query = query.Where(u => !u.IsRegistrationCompleted);
}
else
{
  query = query.Where(u => false);
}
1 голос
/ 16 июня 2011

В одном запросе это будет выглядеть так:

Users.Where(r => (IsCompleted  && r.IsRegistrationCompleted) || (IsInCompleted && !r.IsRegistrationCompleted))
0 голосов
/ 16 июня 2011

Я еще не проверял это, но что-то вроде этого может работать:

(from user in users where IsCompleted && user.IsCompleted select user).Union(from user in users where IsInCompleted && !user.IsCompleted select user).Distinct()
...