我是 Linq 的新手,我很难在数据库中查询包含多个标签 ID 的结果。
所以,我有两个模型:
文件夹和字段标签。文件夹包含一个字符串,其中列出了所有 FieldTag ID。示例:1,2,3
SopFolder 类:
public class SopFolder
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime LastUpdated { get; set; }
public int Status { get; set; }
public string SopFields { get; set; }
public virtual ICollection<SopFolder> SopFolderChildrens { get; set; }
public virtual ICollection<SopBlock> Blocks { get; set; }
public virtual ICollection<SopReview> Reviews { get; set; }
}
SopFields 类:
public class SopField
{
public int Id { get; set; }
public string Name { get; set; }
}
我正在尝试构建一个查询,该查询返回一个 SopFolders 列表,然后我可以将其输出为模型(用于在视图中绑定)和/或 json。绑定等工作正常,但仅适用于完整的文件夹列表,不适用于 SopFields 过滤结果。该操作的 URL 可能如下所示:/SopFolders/ShowTree/?id=4&SopFields=1,2,4
我在构建提供 SopFields 过滤结果的查询时遇到问题。
谢谢你的建议。我使用 asp.net mvc 4。任何关于改进我的整个方法的想法都值得赞赏。
更新1(对评论的回答):
在发布此示例之前,我为 SopFields 使用了一个 int 集合,但我将其替换为一个字符串。从字符串中获取值也很容易,它可能会简化一些事情。无论如何,它也可能是一个 int 集合。对我来说没有区别。
我写的 url 只是为了说明将哪些参数传递给传递结果的操作。
所以我假设我有一个 fieldTags 的列表而不是一个字符串。
我在复杂的 linq 查询中不是很擅长,因为我必须深入了解这一点,但概念查询看起来像这样(我敢肯定,它不起作用):
public ActionResult Index(List<int> fieldTags,int id = 1 )
{
// other stuff
var model =
_db.SopFolders
.Where(r => r.Id == id && r.SopFields.Contains(sopFields))
.Select(r => new
{
id = r.Id,
Text = r.Name,
hasChildren = r.SopFolderChildrens.Any()
});
// more stuff
return View(model);
}
问候, 马库斯