1

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

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-应用程序

它们的 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")

以上是一个与我想要的类似的查询,但我想将 Home 限制为它们的 id 在 List homeIdList 中的位置。

可能的?

4

1 回答 1

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();

希望这可以帮助。

于 2013-07-30T21:47:59.427 回答