C# 如何用LINQ写这个
我的数据库中有3个表C# 如何用LINQ写这个,c#,.net,linq,C#,.net,Linq,我的数据库中有3个表 Group [GroupId, GroupName] GroupUser [GroupId, AuthorId] Author [AuthorId, AuthorName] Book [BookId, AuthorId, BookName] 如何获取特定GroupId的书籍列表 我试过这个LINQ声明: DataLoadOptions dlo = new DataLoadOptions(); dlo.LoadWith<GroupUser>(p => p.
Group [GroupId, GroupName]
GroupUser [GroupId, AuthorId]
Author [AuthorId, AuthorName]
Book [BookId, AuthorId, BookName]
如何获取特定GroupId的书籍列表
我试过这个LINQ声明:
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<GroupUser>(p => p.User);
dlo.LoadWith<User>(p => p.Books);
context.LoadOptions = dlo;
List<Book> books = context.GroupUser
.Where(p => p.GroupId == groupId)
.Select(p => p.User.Books)
.ToList();
但是,这不起作用,因为编译器抱怨:
无法将类型System.Collections.Generic.List[System.Data.Linq.EntitySet[Book]]隐式转换为System.Collections.Generic.List[Book]
作为最后一种手段,我想可能只是选择GroupUser的列表,然后迭代每个子对象,然后手动将其添加到我的books变量中,但是对我来说,这似乎是LINQ应该做的额外工作。取决于RideUser.Books的类型,我假设你可以简单地将Select更改为SelectMany。Select将返回IEnumerable,而SelectMany将把结果展平为IEnumerable,然后您可以在上面调用ToList:
List<Book> books = context.GroupUser
.Where(p => p.GroupId == groupId)
.SelectMany(p => p.RideUser.Books)
.ToList();
根据RideUser.Books的类型,我假设您可以简单地将Select更改为SelectMany。Select将返回IEnumerable,而SelectMany将把结果展平为IEnumerable,然后您可以在上面调用ToList:
List<Book> books = context.GroupUser
.Where(p => p.GroupId == groupId)
.SelectMany(p => p.RideUser.Books)
.ToList();
如果需要筛选的图书查询,请编写筛选的图书查询
List<Book> books = context.Books
.Where(b => b.Author.GroupUsers
.Any(gu => gu.Group.GroupId == theGroupId))
.ToList();
如果需要筛选的图书查询,请编写筛选的图书查询
List<Book> books = context.Books
.Where(b => b.Author.GroupUsers
.Any(gu => gu.Group.GroupId == theGroupId))
.ToList();
为清晰起见-您使用的是LINQ到SQL还是LINQ到实体?为清晰起见-您使用的是LINQ到SQL还是LINQ到实体?完美-这正是我所需要的。谢谢。太好了——这正是我需要的。非常感谢。