我正在开发一个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();
答案 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
作为默认值。