Chr*_*ris 5 servicestack ormlite-servicestack
我正在尝试使用子句Enumerable.Contains内部查询我的数据库SqlExpressionVisitor.Where.编译lambda时,我得到一个空引用异常.
当访问者进入foreach (Object e in inArgs)(当前行1067)内部时SqlExpressionVisitor.VisitArrayMethodCall,它会因为inArgs为空而窒息.以下是导致错误的示例.我不太了解lambda /表达式,知道为什么会发生这种情况.
所以我的问题是,我没有Where正确使用该条款或这是一个错误吗?
class Program
{
static void Main(string[] args)
{
var connectionFactory = new OrmLiteConnectionFactory(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database1.mdf;Integrated Security=True;User Instance=True", SqlServerDialect.Provider);
SetupDb(connectionFactory);
using (var db = connectionFactory.OpenDbConnection())
{
var numbersToSelect = new int[2] { 1, 2 };
db.Select<SomeObject>(e => e.Where(o => numbersToSelect.Contains(o.Number)));
}
}
static void SetupDb(IDbConnectionFactory connectionFactory)
{
using (var db = connectionFactory.OpenDbConnection())
{
db.DropTable<SomeObject>();
db.CreateTable<SomeObject>();
db.Insert(new SomeObject { Number = 1 });
db.Insert(new SomeObject { Number = 2 });
db.Insert(new SomeObject { Number = 3 });
db.Insert(new SomeObject { Number = 4 });
db.Insert(new SomeObject { Number = 5 });
}
}
}
class SomeObject
{
public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
经过多一点挖掘后,事实证明调用已编译的方法返回一个int[]导致object[]转换为null的方法.施放以IEnumerable修复我的具体问题.
变
var getter = lambda.Compile();
var inArgs = getter() as object[];
Run Code Online (Sandbox Code Playgroud)
至
var getter = lambda.Compile();
var inArgs = getter() as IEnumerable;
Run Code Online (Sandbox Code Playgroud)
不知道这有什么影响(如果有的话).仍在寻找一些指导.
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |