我已经建立了一个标记系统
我相信它是带有下表的“toxi”解决方案:
图书 [id,作者,标题] 与有多对多的关系
代码 [id,tagName]
BookHasTag [id,bookId,tagId] junction-table
使用linq-sql我想:
请你帮忙,我知道这有点厚颜无耻,而且我知道通常喜欢看到你付出了努力,但为了简洁起见,我忽略了我失败的尝试。
答案 0 :(得分:1)
如果我理解你是对的,你想要这样的东西:
选择前20个最受欢迎的广告代码,并将其计算在内
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();
给出图书ID,获取有关图书的所有信息,包括与之相关的标签
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();