Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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#_Entity Framework 6 - Fatal编程技术网

C# 按相关表计数筛选查询

C# 按相关表计数筛选查询,c#,entity-framework-6,C#,Entity Framework 6,我正在尝试获取数据库中至少有一个家庭成员的人的列表 FamilyMembers是一个相关表,由一对多外键绑定 [1]个人.PersonId-->[0或更多]家庭成员.PersonId 我尝试过这样做,但是Count()似乎不像我想象的那样工作。 我得到的结果同时包含0个和更多家庭成员 public IEnumerable<Person> GetPeopleWithFamilyMembers() { IQueryable<Person> query = Contex

我正在尝试获取数据库中至少有一个家庭成员的人的列表

FamilyMembers
是一个相关表,由一对多外键绑定

[1]个人.PersonId-->[0或更多]家庭成员.PersonId

我尝试过这样做,但是
Count()
似乎不像我想象的那样工作。 我得到的结果同时包含0个和更多
家庭成员

public IEnumerable<Person> GetPeopleWithFamilyMembers()
{
    IQueryable<Person> query = Context.Persons;

    query = query.OrderBy(x => x.FamilyMembers.Count());
    query = query.Where(x => x.FamilyMembers.Count() > 0);

    // Execute query and return result:
    return query.Select(x => x);
}
public IEnumerable GetPeopleWithFamilyMembers()
{
IQueryable query=Context.Persons;
query=query.OrderBy(x=>x.FamilyMembers.Count());
query=query.Where(x=>x.FamilyMembers.Count()>0);
//执行查询并返回结果:
返回查询。选择(x=>x);
}

我真的不知道该怎么办:-/

我努力寻找一个不使用扩展查询表单的优雅解决方案

在SQL中实现这一点的唯一方法是使用Group ByJoin,但我不知道是否正确地将其转换为LINQ。请随意指出我的错误

var query = Persons
    .Join(FamilyMembers,
        p => p.Id,
        f => f.Id,
        (p,f) => new { Person = p, FamilyMembers = f }
    )
    .GroupBy(g => g.FamilyMembers)
    .Where(w => w.FamilyMembers.Count() > 0);
    .Select(x => new {
        Person = x.Person,
        FamilyMembers = x.Count(y => y.FamilyMembers)
    }
);

仅供参考,当使用方法语法时,您不需要
Select(x=>x)
。我知道,我把它放在那里是为了提醒自己,我以后需要处理它:-)在复制/粘贴它时忘记删除它。为什么不在
OrderBy
之前合并那些
Where
子句?如
。其中(x=>x.Deleted!=true&&x.FamilyMembers.Count()>0)
。我将删除已删除的!=此处代码的真实部分,因为它与问题无关。@Michael,当EF为您提供了很好的导航属性时,为什么要浪费时间加入呢?我尝试过这个,但出于某种原因,它不喜欢Where子句中的
w.FamilyMembers
。表示
igroupping'不包含“FamilyMembers”的定义,并且找不到接受第一个“igroupping”类型参数的扩展方法“FamilyMembers”(您是否缺少using指令或程序集引用?
目前,不幸的是,我没有时间了,不得不这样做。希望以后回来用正确的方法解决这个问题。这不是我最自豪的时刻
query=Context.Persons.SqlQuery(“从[dbo].[People]p中选择*从[dbo].[FamilyMembers]f中选择计数(*),其中f.[PersonId]=p.[PersonId]和(f.[Deleted]=0或f.[Deleted]为NULL))>0”).AsQueryable()