Linq Необязательный ORing (Синтаксис метода) - PullRequest
0 голосов
/ 02 февраля 2012

Как мне объединить эти два метода в один?

public override Expression<Func<Attachment, bool>> MatchingCriteria
{
  get { return a => a.Activity.Parent.ActivityUsers.Any(x => (x.User.Id == id)); }
}

и

public override Expression<Func<Attachment, bool>> MatchingCriteria
{
  get { return a => a.Activity.ActivityUsers.Any(x => (x.User.Id == id)); }
}

В частности, идея заключается в том, что я хочу проверить корневую запись на наличие ссылок на определенного пользователя. Но a может быть корнем или ребенком (только один потомок / уровень; не рекурсивный). Я хочу, так сказать, ORing для этих двух выражений Linq.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Может быть что-то вроде:

public override Expression<Func<Attachment, bool>> MatchingCriteria
{
  get 
  {
     return a => a.Activity.Parent.ActivityUsers
                  .Concat(a.Activity.ActivityUsers).Any(x => (x.User.Id == id));
  }
}

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

public override Expression<Func<Attachment, bool>> MatchingCriteria
{
  get 
  {
     return a => a.Activity.Parent.Any(a2 => 
         a2.ActivityUsers.Any(x => 
             (x.User.Id == id) || x.Activity.ActivityUsers.Any(y =>
                 y.User.Id == id)));
  }
}

Этот параметр, вероятно, более подходит.1007 *

0 голосов
/ 02 февраля 2012
public override Expression<Func<Attachment, bool>> MatchingCriteria
{
  get { return a => a.Activity.Parent.ActivityUsers.Any(x => (x.User.Id == id)) 
                 || a.Activity.ActivityUsers.Any(x => (x.User.Id == id)); 
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...