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

时间:2013-07-30 21:35:33

标签: c# entity-framework entity-framework-4.1 repository-pattern unit-of-work

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

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限制在他们的id在List homeIdList中。

可能的?

1 个答案:

答案 0 :(得分:1)

使用List的Contains方法,该方法将转换为sql的in运算符。 我建议您尝试获取包含CityBlockCity属性的Homes列表,然后您可以使用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();

希望这有帮助。