我的网站帖子创建了标签来对帖子进行分类。我正在使用标签为帖子创建标签过滤器。 StackOverflow 标签部分 例如
我正在使用MSSQL数据库列存储不同表的多个行ID,每个ID用逗号分隔。
这是一个例子:
身份证 | 标题 | 标签 |
---|---|---|
1 | 标题1 | 1,2,3 |
2 | 标题 2 | 3,4,7 |
... | ... | ... |
我想在控制器操作中使用逗号分隔它们,但我面临一些问题:
控制器动作方法:
[HttpGet]
public async Task<IActionResult> Detail(int id)
{
var taggedPosts = from p in _context.Posts select p;
taggedPosts = taggedPosts.Where(p => int.Parse(p.Tags) == id);
var Tags = new DetailTagsViewModel
{
PostCard = await taggedPosts.ToListAsync()
};
return View(Tags);
}
我尝试过使用
p.Tags
来分离 .Split(',')
但它不起作用。
这是我尝试过的:
var splitTags
var splitTags = from p in _context.Posts select p.Tags.Split(',');
给出错误:
taggedPosts
taggedPosts = taggedPosts.Where(p => p.Tags.Split(',').Select(int.Parse) == id);
给出错误:
IEnumerable<int>
和 int
怀疑Entity Framework Core/LINQ中不支持将
String.Split()
转换为SQL表达式。
唯一的实现方法是从数据库中取出所有记录并在内存端进行过滤。这可能会牺牲数据库中的查询性能。
var taggedPosts = await (from p in _context.Posts select p)
.ToListAsync();
taggedPosts = taggedPosts.Where(p => p.Tags
.Split(',')
.Select(x => Convert.ToInt32(x))
.Contains(id));
var Tags = new DetailTagsViewModel
{
PostCard = taggedPosts.ToList()
};