我想知道一个字符串(存储在数据库中的 OSchlagwoerter 列中)是否包含字符串列表中的任何字符串(存储在变量标签中)。 为了实现这一目标,我想循环遍历标签列表并检查每个标签是否 OSchlagwoerter 包含它。但是,我无法访问传递的对象的字段 OSchlagwoerter。
数据库查询如下所示
return dbctx.Images
.Where(tagFilter(tags))
.Select(x => new ImageObj()
.ToList();
tagFilter
表达式应如下所示:
private Expression<Func<ImageObj, bool>> tagFilter(List<string> tags)
{
if ( tags.Count > 0)
{
//This line does not work
var tagsInDb = x => x.OSchlagwoerter;
foreach (var t in tags)
{
if (tagsInDb .Contains(t))
{
return true;
}
}
return false;
//first approach, does not work, only finds one tag in columns with on word in it
//return x => tags.Contains(x.OSchlagwoerter);
}
else
{
return x => true;
}
}
编辑:
dbctx.Images
是数据库中类型为 ImageObj
的表
OSchlagwoerter
定义如下:
public class ImageObj {
public string OSchlagwoerter { get; set; }
}
您可能使解决方案过于复杂(或者我可能无法正确理解您想要的内容)。但是,如果您需要的只是检查数据库列中的值是否存在于列表中 - 这是一个简单的解决方案:
List<string> tags = ...;
return dbctx.Images
.Where(x => tags.Any(x.OSchlagwoerter))
.Select(x => new ImageObj())
.ToList();