我有2个表:POHeader和PODetail。我想返回所有具有关联的PODetail.ItemId = intItemId的POHeader。如何在LINQ中做到这一点?

这就是我尝试过的。

首先,我的存储库中有一个使用Include参数包含PODetails的方法:

public IQueryable<POHeader> SearchForWithDetails(int intFacilityId)
{
    return DbSet.Include("PODetails").Where(x => x.FacilityId == intFacilityId);
}


然后将结果传递给:

public IQueryable<POHeader> SearchForPODetailsByItemId(IQueryable<POHeader> poHeaders, int intItemId)
{
    //This returns a type of PODetail not POHeader
    var q = poHeaders.SelectMany(c => c.PODetails).Where(c => c.ItemId == intItemId);

    //In this case, I can't figure out the syntax :(
    var p = from poHeader in poHeaders
            let filteredPOs = from poDetail in poHeader.PODetails
            where poDetail.ItemId == intItemId
            select ????
    return p;
}


正确的方法是什么?

另外,我可以预见需要两个结果:


只是返回一个IQueryable
返回联接表的结果。

最佳答案

尝试这个;

var result = poHeaders.Where(e => e.PODetails.Any(a => a.ItemId == intItemId));

08-19 17:28