2013-10-25 33 views
0

當我嘗試以下:Ormlite + PredicateBuilder 「可變範圍從 '' 引用,但它沒有定義」

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()); 
    } 

我收到錯誤:

variable 'x' of type '[...]tblMatter' referenced from scope '', but it is not defined ([...]我的)

本質上,我試圖完成的是讓謂詞返回true,如果事項字符串包含在任何事物中。

我錯過了什麼?我是否需要使用臨時變量做某種foreach?

+0

不知道它的問題,而是'VAR過濾= PredicateBuilder.True ();'是死代碼,因爲你馬上重新分配過濾器變量。我會嘗試首先消除噪音,即直接將lambda放在Where中。 –

+0

這是ormlite-servicestack嗎?我更新了標籤。 – Gray

回答

0

以下代碼完成我需要做的事情,儘管可能不是最漂亮的。

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()); 
    } 
相關問題