编辑最新一期/关注
我正在使用EF1并试图执行以下操作,但我的多对多关系存在问题。我有BuildExpression扩展方法可以解决.Contains()在EF1中不可用。
PagingUsers&群体之间存在多对多的关系。
到目前为止,这是我的工作。
// 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;
}
答案 0 :(得分:2)
试试这个:
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?内在还是外在?为什么?
答案 1 :(得分:1)
回答你的第二个问题:
我不明白为什么要将它转换为大写限制。对于您的类型信息,Linq查询不区分大小写,如果您希望以区分大小写的方式迭代它应该完成迭代列表或第一项依赖,您通过执行LINQ然后执行它获得 - 按字母顺序搜索案例。
答案 2 :(得分:1)
该查询在.NET 4.0中按原样运行。对于.NET 3.5,搜索“BuildContainsExpression”。