这是我的桌子结构
Place
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);但是,我希望能够基于一个类别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's查询呢?这个LINQ/PLINQO查询正在融化我的大脑。提前感谢!
发布于 2011-03-23 18:04:23
您需要编写如下扩展方法:
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关系。一旦进行了此更改,PLINQO将自动生成正确的代码,并将在两个表之间创建一个链接,跳过中间表。因此,您可以通过访问Place实体上的属性,获得与当前Place实体关联的PlaceCategories集合。
如果您有任何问题,请记住与我们联系,并确保查看位于这里和PLINQO论坛的社区论坛。
谢谢-Blake Niemyjski (CodeSmith支持)
https://stackoverflow.com/questions/5404494
复制相似问题