2012-03-26 5 views
0

私は、1人のユーザーがそれに割り当てられたオブジェクトまたはワークグループを持つことができます。ユーザーは直接または作業グループを介して割り当てられますが、オブジェクトを設定することはできません。linqクエリを組み合わせて別個のレコードを選択する方法は?

public class Procedure 
{ 
     ..... 
     public Guid? AssignedToId {get;set;} //Foreign Key to AssignedTo 
     public Contact AssignedTo {get;set;} //Single user assignment 
     public Guid? AssignedWorkGroupId {get;set;} //Foreign Key to AssignedWorkGroup 
     public WorkGroup AssignedWorkGroup {get;set;} //Multiple user assignment 
     public Guid? AssignedBuisnessPartnerId {get;set;} 
     public BusinessPartner AssignedBuisnessPartner {get;set;} 

} 

私は、ユーザーが直接割り当てまたは割り当てられた作業グループの一部であることが可能な手順を見つけることができ、単一のクエリを作成する方法を把握しようとしています。現在、私は2つの別々のクエリを持ち、リストを結合して戻ってきます。どちらがうまくいくのですか?ここで

は、私が今持っているものです。

var procedures = _procedureRepository.Get(p => p.AssignedToId == assignedId).ToList(); 

procedures.AddRange(_procedureRepository.Get(p => p.AssignedWorkGroup.Contacts.Select(c => c.Id).Contains(assignedId) || p.AssignedBuisnessPartner.Contacts.Select(c => c.Id).Contains(assignedId)); 
+1

私があなたの2つのクエリを提示した場合、 – Aducci

+0

@Aducci、私はクエリを追加しました。 – DDiVita

答えて

1

あなたはLINQでConcatと等価であるSQLでUnion All、探しているように見えます。次のコードは、データベースへの呼び出しを1回だけ実行します。それがあなたの現在の方法よりも速くなるかどうかは分かりません。

var procedures2 = _procedureRepository.Get(p => p.AssignedWorkGroup.Contacts 
                    .Select(c => c.Id) 
                    .Contains(assignedId) || 
               p.AssignedBuisnessPartner.Contacts 
                     .Select(c => c.Id) 
                     .Contains(assignedId)); 

var procedures = _procedureRepository.Get(p => p.AssignedToId == assignedId) 
            .Concat(procedures2); 
関連する問題