c# - LINQ to Entities 和多对多

标签 c# linq entity-framework .net-3.5 linq-to-entities

编辑到最新的问题/关注点

我正在使用 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?内部还是外部?为什么?

关于c# - LINQ to Entities 和多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4259807/

相关文章:

c# - ASP.NET Response.Redirect 打开一个新的浏览器窗口?

c# - 面板滚动 c#

c# - LINQ - Where 表达式是否返回新实例或对对象实例的引用

c# - EF 6 如何设置 1 :M relationship with Surrogate Keys

c# - C++ 和 C# COM Interop,导入 TLB 错误 C1083

c# - 没有文件扩展名的C#搜索结果

.net - 在SQL Server和.NET代码+ LINQ之间处理非常大的字符串

c# - 使用 C# Linq 将对象插入到列表中

c# - 如何使用嵌套类从特定的Model转换为ViewModel,反之亦然?

c# - 大型项目的 Entity Framework