Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查询子表值_C#_.net_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# 如何查询子表值

C# 如何查询子表值,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,我有两张桌子:POHeader和PODetail。我想返回所有具有关联PODetail.ItemId=intItemId的POHeader。在林克我该怎么做 这就是我尝试过的 首先,我的存储库中有一个方法,它使用Include参数来包含PODetails: public IQueryable<POHeader> SearchForWithDetails(int intFacilityId) { return DbSet.Include("PODetails").Where(x

我有两张桌子:POHeader和PODetail。我想返回所有具有关联PODetail.ItemId=intItemId的POHeader。在林克我该怎么做

这就是我尝试过的

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

public IQueryable<POHeader> SearchForWithDetails(int intFacilityId)
{
    return DbSet.Include("PODetails").Where(x => x.FacilityId == intFacilityId);
}
public IQueryable SearchForWithDetails(int-intFacilityId)
{
返回DbSet.Include(“PODetails”)。其中(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;
}
public IQueryable SearchForPODetailsByItemId(IQueryable poHeaders,int intItemId)
{
//这将返回一种类型的PODetail not POHeader
var q=poHeaders.SelectMany(c=>c.PODetails)。其中(c=>c.ItemId==intItemId);
//在这种情况下,我无法理解语法:(
var p=poHeaders中的poHeader中的from poHeader
让filteredPOs=来自poHeader.PODetails中的poDetail
其中poDetail.ItemId==intItemId
选择????
返回p;
}
正确的方法是什么

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

  • 只需返回一个IQueryable
  • 返回联接表结果
  • 试试这个

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

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

    假设您的a Header->Detail是一对多关系,并且Detail有一个返回到其Header的导航,名为。Header:

    public IQueryable<POHeader> SearchForPODetailsByItemId(IQueryable<POHeader> poHeaders, int intItemId)
    {
        var headersForThisItem = poHeaders.SelectMany(pod => pod.PODetails).Where(pod => pod.ItemId == intItemId)
            .Select(pod=> pod.Header).Distinct();//.Distinct to eliminate duplicates when 2 Details have the same header.  Not necessary if ItemId filter naturally provides distinct results.
    
        return headersForThisItem ;
    }
    
    public IQueryable SearchForPODetailsByItemId(IQueryable poHeaders,int intItemId)
    {
    var headersForThisItem=poHeaders.SelectMany(pod=>pod.PODetails)。其中(pod=>pod.ItemId==intItemId)
    .Select(pod=>pod.Header).Distinct();/.Distinct可在两个详细信息具有相同的标题时消除重复项。如果ItemId筛选器自然提供不同的结果,则不需要此选项。
    返回该项目的标题;
    }
    

    未经测试,但我认为这将满足您的需要。

    假设您的a Header->Detail是一对多关系,Detail有一个导航返回到它的Header,名为。Header:

    public IQueryable<POHeader> SearchForPODetailsByItemId(IQueryable<POHeader> poHeaders, int intItemId)
    {
        var headersForThisItem = poHeaders.SelectMany(pod => pod.PODetails).Where(pod => pod.ItemId == intItemId)
            .Select(pod=> pod.Header).Distinct();//.Distinct to eliminate duplicates when 2 Details have the same header.  Not necessary if ItemId filter naturally provides distinct results.
    
        return headersForThisItem ;
    }
    
    public IQueryable SearchForPODetailsByItemId(IQueryable poHeaders,int intItemId)
    {
    var headersForThisItem=poHeaders.SelectMany(pod=>pod.PODetails)。其中(pod=>pod.ItemId==intItemId)
    .Select(pod=>pod.Header).Distinct();/.Distinct可在两个详细信息具有相同的标题时消除重复项。如果ItemId筛选器自然提供不同的结果,则不需要此选项。
    返回该项目的标题;
    }
    

    未经测试,但我认为这将满足您的需求。

    啊,现在可以了。所以两种方法都可以。但可能会因为更干净而使用此版本!谢谢Esteban!啊,现在可以了。所以两种方法都可以了。但可能会因为更干净而使用此版本!谢谢Esteban!