首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何建立多个id的自定义PLINQO查询?

如何建立多个id的自定义PLINQO查询?
EN

Stack Overflow用户
提问于 2011-03-23 11:24:23
回答 1查看 248关注 0票数 0

这是我的桌子结构

Place

  • PlaceId主键
  • 名字
  • ..。

PlaceCategories

  • CatId主键
  • 名字
  • ..。

PlaceCats

  • PlaceId主键
  • CatId主键

下面是我的查询,它根据类别id (表联接)来提取位置。

代码语言:javascript
复制
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);
}

我就是这样用的:

代码语言:javascript
复制
places = Db.Places.ByPlaceCat(a => a.CatId == 5);

但是,我希望能够基于一个类别id的List<int>进行提取。通过查看生成的PLINQO代码,一个由多个PlaceId的查询(但不使用联接表)的查询如下所示:

代码语言:javascript
复制
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查询正在融化我的大脑。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-23 18:04:23

您需要编写如下扩展方法:

代码语言:javascript
复制
    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支持)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5404494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档