C# linq到sql查询标记系统-toxi
我已经建立了一个标签系统 我相信它是“toxi”解决方案,具有以下表格: 书籍[id、作者、标题]与 标记[id,标记名] BookHasTag[id,bookId,tagId]连接表 使用linq sql,我希望:C# linq到sql查询标记系统-toxi,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,我已经建立了一个标签系统 我相信它是“toxi”解决方案,具有以下表格: 书籍[id、作者、标题]与 标记[id,标记名] BookHasTag[id,bookId,tagId]连接表 使用linq sql,我希望: 选择前20名最受欢迎的标签,并将其计数 给定图书id,获取有关图书的所有信息,包括与之关联的标签 与特定标记关联的所有书籍的列表 请你帮个忙,我知道这有点厚颜无耻,我知道我通常很想看到你做出了努力,但为了简单起见,我不想说我失败的尝试 如果我理解你是对的,你想要这样的东西: 选
- 选择前20名最受欢迎的标签,并将其计数
- 给定图书id,获取有关图书的所有信息,包括与之关联的标签
- 与特定标记关联的所有书籍的列表
请你帮个忙,我知道这有点厚颜无耻,我知道我通常很想看到你做出了努力,但为了简单起见,我不想说我失败的尝试 如果我理解你是对的,你想要这样的东西: 选择前20名最受欢迎的标签,并将其计数 给定图书id,获取有关图书的所有信息,包括与之关联的标签 与特定标记关联的所有书籍的列表
你的班级模型是什么样子的?换句话说,你是否有一个
Book
类和一个Tags
属性返回一个Tag
-对象列表,反之亦然,你是否有一个Tag
类和一个Books
属性返回一个Book
-对象列表,Tag类有BookHasTagI建议您包含代码的相关部分。这使得想出一个解决方案变得容易多了……好极了,这真是一件乐事。谢谢你的帮助。我可以问一下吗?每个数据库是否只运行一个针对db的查询?是的,它们会。如果要查看sql语句,请使用linqpad转换linq代码。也许你可以接受这个答案?
var lsTags=(
from tag in db.Tags
select new
{
tag.id,
tag.tagName,
NbrOfTags=
(
from hasTags in db.BookHasTag
where hasTags.tagId==tag.id
select hasTags.id
).Count()
}
).OrderByDescending(a=>a.NbrOfTags).Take(20).ToList();
var bookId=1;
var lsBooksWithTags=(
from book in db.Books
where book.id==bookId
select new
{
book.id,
book.author,
book.title,
Tags=(
from bookHasTag in db.BookHasTag
join tags in db.Tags
on bookHasTag.tagId equals tags.id
where bookHasTag.bookId==book.id
select new
{
tags.id,
tags.tagName
}
)
}
).ToList();
var tagId=1;
var lsBooksByTagId=(
from book in db.Books
where
(
db.BookHasTag.Where(a=>a.tagId==tagId).Select(a=>a.bookId)
).Contains(book.id)
select new
{
book.id,
book.author,
book.title
}
).ToList();