2016-08-17 1 views
2

私はServiceStack Ormliteを使用しています。私のコードは、この好き:なぜ、「範囲から参照された変数ですが、定義されていません」というエラーがOrnetiteの.netで発生しますが、Monoではうまく機能しますか?

var number = _conn.Count<Lot>(lot => lot.Labels.Contains("lookingString")); 

私の問題は、コードがモノでうまく動作しますが、.NETフレームワークからのエラーを取得するものです。このような

モノラルで
 
Message: [InvalidOperationException: variable 'lot' of type 'pM.Models.Entity.Lot' referenced from scope '', but it is not defined] 

System.Linq.Expressions.Compiler.VariableBinder.Reference(ParameterExpression node, VariableStorageKind storage):142 
System.Linq.Expressions.Compiler.VariableBinder.VisitParameter(ParameterExpression node):10 
System.Linq.Expressions.Compiler.VariableBinder.VisitUnary(UnaryExpression node):59 
System.Linq.Expressions.ExpressionVisitor.VisitMember(MemberExpression node):13 
System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node):12 
System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1 nodes):26 
System.Linq.Expressions.Compiler.VariableBinder.VisitLambda[T](Expression`1 node):88 
System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression lambda, DebugInfoGenerator debugInfoGenerator):0 
ServiceStack.OrmLite.SqlExpression`1.VisitMethodCall(MethodCallExpression m):87 
ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b):135 
ServiceStack.OrmLite.SqlExpression`1.Where(Expression`1 predicate):12 
ServiceStack.OrmLite.ReadExpressionCommandExtensions.Scalar[T,TKey](IDbCommand dbCmd, Expression`1 field, Expression`1 predicate):26 
ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func`2 filter):16 
pM.Api.LabelReadHelper.GetUsage[T](String labelName) in c:\TeamCity\buildAgent\work\b85b83a981467d5b\pM.Api\Common\Labels\Template\LabelReadHelper.cs:23 

、LastSql:

SELECT COUNT(*) FROM `Lot` WHERE (upper(`Labels`) like '%lookingString%' AND (`CustomerId` = 'a54f02ee-cc74-4b4d-845d-6db2efb1f5dc')); 

私のServiceStack.Ormliteバージョンは4.0.50です。

Containsメソッドはプラットフォームによって異なるのですか?

+0

上のコードを参照してください。http://gistlyn.com/?gist=cbf0ced50b86c9881d5178d39d613cda&collection=74d7b0467a197f678bb4220b2c301ac3 –

答えて

2

これは、あなたがtry out Live in GistlynをすることができますOrmLiteの最新v4.0.62に動作します:それはあなたの代わりにmono.gistlyn.comを使用して試すことができますモノラル/ Linuxで同じ動作、例えばを持って

public class Lot 
{ 
    [AutoIncrement] 
    public long Id { get; set; } 
    public string Labels { get; set; } 
} 

db.CreateTable<Lot>(); 

db.Insert(new Lot { Labels = "foo" }); 
db.Insert(new Lot { Labels = "bar" }); 
db.Insert(new Lot { Labels = "qux" }); 
db.Insert(new Lot { Labels = "foo,bar,qux" }); 

var count = db.Count<Lot>(x => x.Labels.Contains("bar")); 

"Labels with 'bar': {0}".Print(count); //= 2 

+0

こんにちはmythz、私は問題を再現するために、テストを更新: http://gistlyn.com/?gist= cbf0ced50b86c9881d5178d39d613cda&collection = 74d7b0467a197f678bb4220b2c301ac3 gistlynと同じ例外がありますが、私のMonoバージョンで動作します。 Select などの他のメソッドでも同じ問題が発生しました。 –

+0

@TomWuこのような間接を追加することはできません。一般的な 'T'パラメータは具体的なテーブルクラスである必要があります。OrmLiteはテーブルPOCO。 – mythz

関連する問題