ormlite-servicestack,predicatebuilder,Linq,Orm,Predicate,ormlite Servicestack,Predicatebuilder" /> ormlite-servicestack,predicatebuilder,Linq,Orm,Predicate,ormlite Servicestack,Predicatebuilder" />

Linq Ormlite+PredicateBuilder“变量引用自作用域“”,但未定义”

Linq Ormlite+PredicateBuilder“变量引用自作用域“”,但未定义”,linq,orm,predicate,ormlite-servicestack,predicatebuilder,Linq,Orm,Predicate,ormlite Servicestack,Predicatebuilder,当我尝试以下操作时: public List<MatterViewModel> ReturnMatchingMatters(IEnumerable<string> matterNames) { var filter = PredicateBuilder.True<tblMatter>(); filter = x => matterNames.Any(mattername => mattername.To

当我尝试以下操作时:

   public List<MatterViewModel> ReturnMatchingMatters(IEnumerable<string> matterNames)
    {
        var filter = PredicateBuilder.True<tblMatter>();
        filter = x => matterNames.Any(mattername => mattername.ToLowerInvariant() == x.Matter.ToLowerInvariant());

        return this.dal.DB.GetList<MatterViewModel>(OrmLiteConfig.DialectProvider.ExpressionVisitor<tblMatter>().Where(filter).ToSelectStatement());
    }
我收到错误消息:

从作用域引用了“[…]tblMatter”类型的变量“x”,但未定义该变量 [……]地雷

本质上,我试图实现的是,如果matter字符串包含在任何matters中,则谓词返回true


我错过了什么?我需要用一个temp变量做某种形式的foreach吗?

下面的代码完成了我需要做的事情,尽管可能不是最漂亮的

    public List<string> ReturnMatchingMatters(IEnumerable<string> matterNames)
    {

        var filter = PredicateBuilder.True<tblMatter>();
        filter = x => Sql.In(x.Matter, matterNames);

        SqlExpressionVisitor<tblMatter> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<tblMatter>();

        ev.Select("select Matter from tblmatter");
        ev.Where(filter);

        return this.dal.DB.GetList<string>(ev.ToSelectStatement());
    }

不知道这是否重要,但var filter=PredicateBuilder.True;是死代码,因为您会立即重新分配筛选器变量。我会先尝试去除噪声,即直接将lambda放在Where中。这是ormlite servicestack吗?我已经更新了标签。