繁体   English   中英

LINQ to Entities和很多很多

[英]LINQ to Entities and many to many

编辑最新的问题/关注

我正在使用EF1并尝试执行以下操作,但我的多对多关系存在问题。 我有BuildExpression扩展方法可以解决.Contains()在EF1中不可用。

PagingUsers&Groups具有多对多关系。

到目前为止,这是我的工作。

// Find many groups
public IQueryable<Group> FindGroupsByGroupIDs(List<int> group_ids)
{
    return db.Groups.Where(LINQHelpers.BuildContainsExpression<Group, int>(g => g.Group_ID, group_ids));
}

// Find users in a group
public IQueryable<PagingUser> FindPagingUsersByGroupID(int group_id)
{
    return db.PagingUsers.Include("Groups").Where(u => u.Groups.Any(g => g.Group_ID == group_id));
}

现在我想结合这些并找到组列表中的用户。

public IQueryable<PagingUser> FindPagingUsersByGroupIDs(List<int> group_ids)
{
    return from g in db.Groups.Where(LINQHelpers.BuildContainsExpression<Group,int>(g => g.Group_ID, group_ids))
            join p in db.PagingUsers on ???
            select p;
}

尝试这个:

public IQueryable<PagingUser> FindPagingUsersByGroupIDs(List<int> group_ids)
{
    var gids = group_ids.ToArray();
    return from p in db.PagingUsers
            where p.Groups.Any(g => gids.Contains(g.Group_ID))
            select p;
}

至于第二个问题:你想摆脱哪个lambda? 内在还是外在? 为什么?

回答你的第二个问题:

我不明白你为什么把它转换成一个大写的界限。 对于您的类型信息,Linq查询不区分大小写,如果您希望以区分大小写的方式迭代它应该完成迭代列表或第一项依赖,您通过执行LINQ然后执行它获得 - 按字母顺序搜索案例。

该查询在.NET 4.0中按原样运行。 对于.NET 3.5,搜索“BuildContainsExpression”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM