2012-02-02 40 views
0

如何將這兩種方法合併爲一個?Linq可選的或運算(方法語法)

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可能是一個根或可能是一個孩子(只有一個decepti/level;不遞歸)。我想要對這兩個Linq表達式進行ORing,可以這麼說。

+0

我在進一步思考後更新了我的答案。 – 2012-02-02 03:47:37

回答

1

也許是這樣的:

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

這種選項也許更合適。

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