如何通过多个ID构建自定义PLINQO查询?
问题描述:
这里是我的表结构如何通过多个ID构建自定义PLINQO查询?
地方
- PlaceId PK
- 名称
- ...
PlaceCategories
- CATID PK
- 名称
- ...
PlaceCats
- PlaceId PK
- CATID PK
这里是我的查询PU LLS基于类别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);
但我希望能够基于类别的id的List<int>
拉。通过生成的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查询正在融化我的大脑。提前致谢!
答
您需要编写一个扩展方法是这样的:
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的支持)
埃,PlaceCats是连接表。我下载了最新的PLINQO模板并重新生成了代码。多对多的关系在那里。我问了这个场景:我需要列出父类别的每个子类别中的位置,假定PlaceCats表没有将父类别连接到位置的条目。 – Chaddeus 2011-03-24 00:24:04
我已经改变了我的设计,我只是简单地将父类别分配给PlaceCats表格中的地方...不需要查询。但我真的很感谢快速回复,并且我仍然会将此查询放入我的代码中供以后使用。非常感激。 – Chaddeus 2011-03-24 00:25:00
请标记为已回答。 – 2011-07-07 17:41:48