我的LINQ to Entity模型有很多问题需要关联。我是C#和LINQ的新手,所以请耐心等待。
我有一个包含图片和标签的模型,每张图片可以有很多标签,每个标签可以放在很多图片上。在db中有一个普通的关系表,但在对象模型中我将其视为picture.tags(作为列表)和tag.pictures(作为列表)。搜索查询包含多个标记,搜索结果将包含所有标记有我搜索过的所有标记(但可能更多)的图片。要搜索的标签数量不固定。
如何才能做到最好?
答案 0 :(得分:0)
有很多方法可以做到这一点。这是一种方式。我不会声称它是“最好的”,但它会起作用。
IQueryable<Picture> FindByTags(IEnumerable<string> tags)
{
var q = Context.Pictures;
foreach (var tag in tags)
{
q = q.Where(p => p.Tags.Any(t => t.Name == tag));
}
return q;
}
答案 1 :(得分:0)
嗯'。
我似乎无法让第二条线工作,即Contex.Pictures。上下文不允许它。据我所知,这个算法会添加所有匹配至少一个标签的图片,而不仅仅是匹配所有标签的图片?或者我错了吗?
答案 2 :(得分:0)
IQueryable<Picture> FindByTags(IEnumerable<string> included, IEnumerable<string> excluded)
{
return (from p in context.Pictures
where (from item in p.Tags
where included.Contains(item.Tag)
select 1).Count() == included.Count()
where (from item in p.Tags
where excluded.Contains(item.Tag)
select 1).Count() == 0
select p);
}
这也允许排除,如果你不想要,只需取出第二个。这仅适用于图片没有重复标签的情况