这是我的表结构
地方
PlaceCategories
PlaceCats
这是我的查询,它根据类别ID(表格连接)
来提取地方信息public static IQueryable<Places> ByPlaceCat(this Table<Places> table, Expression<Func<PlaceCats, bool>> predicate) {
var db = (DataContext)table.Context;
var innerBizBase = db.PlaceCats.Where(predicate);
return db.Places.Join(innerBizBase, a => a.PlaceId, ab => ab.PlaceId, (a, ab) => a);
}
我这样用:
places = Db.Places.ByPlaceCat(a => a.CatId == 5);
但我希望能够根据List<int>
类别ID进行提取。查看生成的PLINQO代码,由多个PlaceId(但不使用连接表)提取的查询如下所示:
public static IQueryable<Places> ByPlaceId(this IQueryable<Places> queryable, IEnumerable<long> values)
{
return queryable.Where(p => values.Contains(p.PlaceId));
}
我怎么能基本上合并这两个查询,让我传递一个List<int>
的CatId来查询?这个LINQ / PLINQO查询正在融化我的大脑。提前谢谢!
答案 0 :(得分:3)
您需要编写如下的扩展方法:
public static IQueryable<Places> ByPlaceCats(this Table<Places> table, IEnumerable<int> catIds)
{
var db = (TestDataContext)table.Context;
var places = (from placeCat in db.PlaceCats
join place in db.Places on placeCat.PlaceId equals place.PlaceId
where catIds.Contains(placeCat.CatId)
select place);
return places;
}
请注意,可以通过向正确的表添加两个外键将PlaceCats表转换为ManyToMany relationship。完成此更改后,PLINQO将自动生成正确的代码,并将在跳过中间表的两个表之间创建链接。因此,您可以通过访问Places实体上的属性来获取与当前Places实体关联的PlaceCategories集合。
如果您有任何疑问,请务必联系contact us,并确保查看位于here和PLINQO forums here的社区论坛。
由于 -Blake Niemyjski(CodeSmith支持)