如何通过多个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,并务必查看位于herePLINQO forums here的社区论坛。

感谢 -Blake Niemyjski(CodeSmith的支持)

+0

埃,PlaceCats是连接表。我下载了最新的PLINQO模板并重新生成了代码。多对多的关系在那里。我问了这个场景:我需要列出父类别的每个子类别中的位置,假定PlaceCats表没有将父类别连接到位置的条目。 – Chaddeus 2011-03-24 00:24:04

+0

我已经改变了我的设计,我只是简单地将父类别分配给PlaceCats表格中的地方...不需要查询。但我真的很感谢快速回复,并且我仍然会将此查询放入我的代码*以后使用。非常感激。 – Chaddeus 2011-03-24 00:25:00

+0

请标记为已回答。 – 2011-07-07 17:41:48