访问对象的表达式<Func<Object, bool>>中的属性

问题描述 投票:0回答:1

我想知道一个字符串(存储在数据库中的 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; }

}
c# linq entity-framework-core
1个回答
0
投票

您可能使解决方案过于复杂(或者我可能无法正确理解您想要的内容)。但是,如果您需要的只是检查数据库列中的值是否存在于列表中 - 这是一个简单的解决方案:

List<string> tags = ...;
return dbctx.Images                 
    .Where(x => tags.Any(x.OSchlagwoerter))
    .Select(x => new ImageObj())
    .ToList();
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.