返回使用存储库模式传入ID列表的模型列表

本文关键字:列表 ID 模型 模式 存储 返回 | 更新日期: 2023-09-27 18:25:30

我正在使用基于的工作单元模式的存储库

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

他们的Get函数看起来像:

 public virtual IEnumerable<TEntity> Get(
            Expression<Func<TEntity, bool>> filter = null,
            Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
            string includeProperties = "")

现在我想要得到一个行列表作为输出。

查询还将有一个WHERE IN子句,如:

SELEcT *
FROM ...
   INNER JOIN ...
WHERE homeId in (select homeId ....)

我有家庭ID的列表:

List<int> homeIdList = ...

如何使用上面的Get方法构建此查询?

Get(x => x.Id == cityId, includeProperties: "CityBlock, CityBlock.Homes")

以上是一个类似于我想要的查询,但我想将Homes限制在ListhomeIdList中其id所在的位置。

可能吗?

返回使用存储库模式传入ID列表的模型列表

使用List的Contains方法,该方法将被转换为sql的in运算符。我建议你尝试获得一份包括CityBlockCity房产的住宅列表,然后你可以使用linq获取所有城市:

var repository = new GenericRepository<Home>();
var homes = repository.Get(home => homeIdList.Contains(home.Id), 
                            includeProperties: "CityBlock, CityBlock.City")
                            .ToList();
var cities = homes.Select(h => h.CityBlock.City).Distinct().ToList();

希望这能有所帮助。