Entity framework 获取一对多关系中多个id的数据列表

Entity framework 获取一对多关系中多个id的数据列表,entity-framework,linq-to-entities,ef-code-first,Entity Framework,Linq To Entities,Ef Code First,我有两个名为“区域”和“地产”的实体 每个区域有多个房地产(销售房地产),每个房地产有一个区域(一对多) 我想得到多个地区的房地产清单 这是我的代码: var estates = _unitOfWork.Set<Sale>().AsQueryable(); IQueryable<Sale> filteredEstates = estates.Where(e => e.Status == 1); if (requestBuy.Areas.Count > 0)

我有两个名为“区域”和“地产”的实体

每个区域有多个房地产(销售房地产),每个房地产有一个区域(一对多)

我想得到多个地区的房地产清单

这是我的代码:

var estates = _unitOfWork.Set<Sale>().AsQueryable();
IQueryable<Sale> filteredEstates = estates.Where(e => e.Status == 1);

if (requestBuy.Areas.Count > 0)
{
    filteredEstates = requestBuy.Areas.SelectMany(e => e.Sales).AsQueryable();
    //var filteredEstatesNew = new List<Sale>();
    //foreach (var area in requestBuy.Areas)
    //{
    //    filteredEstatesNew.AddRange(area.Sales.ToList());
    //}
    //filteredEstates = filteredEstatesNew.AsQueryable();
    //filteredEstates = filteredEstates.Where(e => e.Status == 1);
}
var estates=\u unitOfWork.Set().AsQueryable();
IQueryable filteredestate=不动产,其中(e=>e.Status==1);
如果(requestBuy.Areas.Count>0)
{
filteredestate=requestBuy.Areas.SelectMany(e=>e.Sales.AsQueryable();
//var filteredEstatesNew=新列表();
//foreach(requestBuy.Areas中的var区域)
//{
//filteredEstatesNew.AddRange(area.Sales.ToList());
//}
//filteredEstates=filteredEstatesNew.AsQueryable();
//filteredEstates=filteredEstates.Where(e=>e.Status==1);
}

我认为我的方式是错误的!帮我怎么做

我不知道您是如何实现您的工作单元和存储库的,但是如果您在Entity Framework中有一对多关系(区域到属性),并且希望获得筛选的属性,那么您应该使用SelectMany,如下所示:

var estates = areas.Where(a => a.Foo == Bar) // area filter
                   .SelectMany(a => a.Estates)
                   .Where(e => e.Status == 1); // estate filter
或者使用查询语法

var estates = from a in areas
              where a.Foo == Bar  // area filter
              from e in a.Estates // SelectMany
              where e.Status == 1 // estate filter
              select e;

我不知道您是如何实现您的工作单元和存储库的,但是如果您在实体框架中有一对多关系(区域到属性),并且您希望获得过滤的属性,那么您应该使用如下SelectMany:

var estates = areas.Where(a => a.Foo == Bar) // area filter
                   .SelectMany(a => a.Estates)
                   .Where(e => e.Status == 1); // estate filter
或者使用查询语法

var estates = from a in areas
              where a.Foo == Bar  // area filter
              from e in a.Estates // SelectMany
              where e.Status == 1 // estate filter
              select e;

SelectMany有什么问题?因为在这段代码之后,我在filteredStates上还有其他过滤器!什么是
filteredStates
?只是一个可查询的变量,用于筛选多个项目上的不动产,而这些项目只是此筛选器中的一个!输入此代码后,我将根据其他筛选器(如名称、位置等)筛选遗产…SelectMany有什么问题?因为在此代码后,我在filteredStates上有其他筛选器!什么是
filteredStates
?只是一个可查询的变量,用于筛选多个项目上的不动产,而这些项目只是此筛选器中的一个!在这段代码中,我正在根据其他过滤器(如名称、位置等)过滤房地产…此查询是否向数据库发送请求并获取数据?还是在ToList()调用之后发生的?!在这个查询之后,我有其他关于不动产的过滤器,我希望所有的查询只发送到数据库一次@只有在执行查询时,才会发生对数据库的阿米尔·耶克塔兹请求。所以,此查询定义不向数据库发送请求。它将在您调用ToList或尝试枚举结果时发送。以下运算符将执行查询:ToList、ToDictionary、GetEnumerator、Count、Sum、Max、First、Single等。有关所有此类运算符,请参阅此查询是否向数据库发送请求并获取数据?还是在ToList()调用之后发生的?!在这个查询之后,我有其他关于不动产的过滤器,我希望所有的查询只发送到数据库一次@只有在执行查询时,才会发生对数据库的阿米尔·耶克塔兹请求。所以,此查询定义不向数据库发送请求。它将在您调用ToList或尝试枚举结果时发送。以下运算符将执行查询:ToList、ToDictionary、GetEnumerator、Count、Sum、Max、First、Single等。有关所有此类运算符,请参阅