实体框架子查询

时间:2011-03-26 14:59:39

标签: c# entity-framework linq-to-entities

伙计我是Entity Framework的新手,我遇到了一个问题,我一直试图解决这个问题。基本上我有4个实体:用户,组,书籍和阅读列表。用户可以加入组,组可以包含由readingList定义的书籍。我试图显示特定组的书籍列表,SQL如下所示:

SELECT * FROM Books b
WHERE b.Id IN (
    SELECT BookID FROM ReadingList rl
        WHERE rl.GroupID = '3')

我通过从UserRepository查询当前用户来确定要搜索的GroupID,目前“按组获取书籍”方法如下所示:

// Get books by group
public IQueryable<Book> GetGroupBooks(string username)
{
    UserRepository userRepository = new UserRepository();
    int groupId = userRepository.GetUserGroupId(username);

    IQueryable<Book> q = from b in entities.Books 
                         where b.Id == 7 // temp - these values should be determined by 
                                         // rl in entites.ReadingList select rl.BookID where r.GroupID == groupID
                         select b;

    return q;
}

显然这是一个临时措施,只返回一本书,但我已将其作为参考。任何帮助或建议将非常感激。

由于

2 个答案:

答案 0 :(得分:7)

我个人认为有一个更好的解决方案(当然未经测试):

首先通过GroupdID从ReadList中选择,然后加入BookID上的书籍。

IQueryable<Book> q = 
       from rl in entities.ReadingList
       join b in entities.Books on rl.BookID equals b.BookID
       where rl.GroupdID ==groupID
       select b;

var books = q.ToList()

如果您有任何问题,请告诉我。

答案 1 :(得分:6)

我没有对它进行过测试,但希望它可以正常使用。

entities.Books.Where(
b => entities.ReadingList.
Where(rl => rl.GroupId == groupId).
Select(rl => rl.BookId).
Contains(b.BookId)
)