我正在使用基于以下工作单元模式的存储库:
他们的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中。
可能的?
答案 0 :(得分:1)
使用List的Contains
方法,该方法将转换为sql的in
运算符。
我建议您尝试获取包含CityBlock
和City
属性的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();
希望这有帮助。