- 兼容 Vb.Net 无法使用 IncludeMany 的问题;#140

This commit is contained in:
28810 2019-12-21 20:31:08 +08:00
parent f5128f3308
commit 5b33e2d062
3 changed files with 35 additions and 5 deletions

View File

@ -7,13 +7,33 @@ Namespace FreeSql.Tests.VB
Sub TestSub()
REM VB.net 表达式解析兼容性测试
Dim id As Integer = 100
Dim List1 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Id = 100).ToList()
Dim List2 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Title = "xxx").ToList()
Dim List3 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Title <> "xxx").ToList()
Dim List2 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Id = id).ToList()
Dim List3 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Title = "xxx").ToList()
Dim title As String = "xxx"
Dim List4 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Title = title).ToList()
Dim List5 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Title <> "xxx").ToList()
Dim List6 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.Title <> title).ToList()
Dim List4 = g.sqlserver.Select(Of Testvb).ToList(Function(a) New With {a, a.Id, a.Title})
Dim List7 = g.sqlserver.Select(Of Testvb).ToList(Function(a) New With {a, a.Id, a.Title})
Dim List8 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.IsDeleted).ToList()
g.sqlserver.Delete(Of Testvb2).Where("1=1").ExecuteAffrows()
g.sqlserver.Delete(Of Testvb).Where("1=1").ExecuteAffrows()
g.sqlserver.Insert(New Testvb With {.Id = 1, .Title = "title1"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb With {.Id = 2, .Title = "title2"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb With {.Id = 3, .Title = "title3"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb2 With {.Id = 1, .TestvbId = 1, .Context = "Context11"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb2 With {.Id = 2, .TestvbId = 1, .Context = "Context12"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb2 With {.Id = 3, .TestvbId = 1, .Context = "Context13"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb2 With {.Id = 4, .TestvbId = 2, .Context = "Context21"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb2 With {.Id = 5, .TestvbId = 2, .Context = "Context22"}).ExecuteAffrows()
g.sqlserver.Insert(New Testvb2 With {.Id = 6, .TestvbId = 3, .Context = "Context31"}).ExecuteAffrows()
Dim List9 = g.sqlserver.Select(Of Testvb).IncludeMany(Function(a) a.Testvb2s).ToList()
Dim List5 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.IsDeleted).ToList()
End Sub
End Class
@ -23,4 +43,13 @@ Class Testvb
Property Id As Integer
Property Title As String
Property IsDeleted As Boolean
Property Testvb2s As List(Of Testvb2)
End Class
Class Testvb2
Property Id As Integer
Property TestvbId As Integer
Property Testvb As Testvb
Property Context As String
End Class

View File

@ -5,7 +5,7 @@ Public Class g
Shared sqlserverLazy As Lazy(Of IFreeSql) = New Lazy(Of IFreeSql)(New Func(Of IFreeSql)(Function() New FreeSqlBuilder() _
.UseConnectionString(DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3") _
.UseAutoSyncStructure(True) _
.UseMonitorCommand(Sub(cmd) Trace.WriteLine("\r\n线程" & Thread.CurrentThread.ManagedThreadId & ": " & cmd.CommandText)) _
.UseMonitorCommand(Sub(cmd) Trace.WriteLine(vbCrLf & "线程" & Thread.CurrentThread.ManagedThreadId & ": " & cmd.CommandText)) _
.UseLazyLoading(True) _
.Build()))

View File

@ -386,6 +386,7 @@ namespace FreeSql.Internal.CommonProvider
var expBody = navigateSelector?.Body;
if (expBody == null) return this;
if (expBody.NodeType == ExpressionType.Convert) expBody = (expBody as UnaryExpression)?.Operand;
MethodCallExpression whereExp = null;
int takeNumber = 0;
Expression<Func<TNavigate, TNavigate>> selectExp = null;