如何组合linq查询和选择不同的记录?

如何组合linq查询和选择不同的记录?,linq,entity-framework,lambda,entity-framework-4.1,Linq,Entity Framework,Lambda,Entity Framework 4.1,我有一个对象,可以指定一个用户或一个工作组。用户可以直接分配,也可以通过工作组分配,但对象不能同时设置这两个参数 public class Procedure { ..... public Guid? AssignedToId {get;set;} //Foreign Key to AssignedTo public Contact AssignedTo {get;set;} //Single user assignment public Guid

我有一个对象,可以指定一个用户或一个工作组。用户可以直接分配,也可以通过工作组分配,但对象不能同时设置这两个参数

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

}
我试图找出如何编写一个查询,在这里我可以找到一个过程,在这个过程中,用户可以直接被分配,或者是被分配的工作组的一部分。目前,我有两个单独的查询,并结合我得到的列表。这是可行的,但可能没有那么有效

以下是我现在拥有的:

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

看起来您正在sql中寻找一个
Union-All
,它相当于linq。下面的代码将只执行一次对数据库的调用。不确定它是否会比您当前的方法快

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

如果您能向我们展示您的两个问题,那将非常有帮助