【问题标题】:How to combine linq queries and selecting distinct records?如何组合 linq 查询并选择不同的记录?
【发布时间】:2012-04-09 23:52:40
【问题描述】:

我有一个可以分配给它的单个用户或工作组的对象。可以直接或通过工作组分配用户,但对象永远不能同时设置两者。

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

【问题讨论】:

  • 如果您向我们展示您的两个查询将会很有帮助

标签: linq entity-framework lambda entity-framework-4.1


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多