我是否应该写,简单加入常见记录?

时间:2013-07-09 04:43:26

标签: asp.net-mvc linq

我正在开发一个ASP.NET MVC应用程序。我有两个查询,我想从这些查询中获取常见记录。

我想编写简单的联接来获取常见记录吗?

 var poList = 
   (from po in db.PurchaseOrders
    where po.CompanyId == companyId && 
          po.PartyId == partyId && 
         (po.IsDeleted == false || po.IsDeleted == null)
    select po into newPO
    select new
    {
        Name = newPO.PONo,
        Id = newPO.Id    
    }); 

var poList2 = (db.Employees.Where(x => x.Id == EmpID)
      .SelectMany(x => x.Roles)
      .SelectMany(x => x.Employees)
      .Distinct()
      .SelectMany(x => x.PurchaseOrders)
      .Select(po => new { Name = po.PONo, Id = po.Id }));

我正在尝试编写连接,但它要求再提一个参数,如何为常见记录编写一个简单的连接?

  var finalPO = poList.Join(poList2).ToList();

3 个答案:

答案 0 :(得分:0)

Union将为您提供以下所有记录: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx

Join方法将为您提供与提供的键匹配的记录,但不仅需要两个枚举作为参数: http://msdn.microsoft.com/en-us/library/bb534675.aspx

答案 1 :(得分:0)

您可以使用Join方法的重载来指定连接条件:

poList.Join(poList2,a =&gt; a.Name,b =&gt; b.Name,(a,b)=&gt; new {Name = b.PONo,Id = b.Id}); < / p>

答案 2 :(得分:0)

您不需要连接,因为您可以将第一个查询中的表达式应用于第二个查询的“原始”结果:

var poList2 = db.Employees.Where(x => x.Id == EmpID)
                .SelectMany(x => x.Roles)
                .SelectMany(x => x.Employees)
                .Distinct()
                .SelectMany(x => x.PurchaseOrders);

var result = from po in poList2
             where po.CompanyId == companyId && 
                   po.PartyId == partyId && 
                   !po.IsDeleted
             select po into newPO
             select new
             {
                 Name = newPO.PONo,
                 Id = newPO.Id    
             }; 

如果您需要原本打算从poList2获得的结果:

var result2 = poList2.Select(po => 
              {
                  Name = po.PONo,
                  Id = po.Id    
              }; 

因此,一般来说,如果将投影推迟到匿名类型,则可以对查询主体执行更多操作。

附注:我使用了!po.IsDeleted,因为我强烈建议将字段设为不可为空,并将false作为默认值。