Skip to content

Commit c7b63ef

Browse files
2881028810
authored andcommitted
- 解决 vb.net 表达式无法解析字符串比较;#140
1 parent f162520 commit c7b63ef

File tree

5 files changed

+70
-0
lines changed

5 files changed

+70
-0
lines changed

Examples/test_vb/Program.vb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Imports System
2+
3+
Module Program
4+
Sub Main(args As String())
5+
Console.WriteLine("Hello World!")
6+
7+
Dim fsql = New FreeSql.FreeSqlBuilder() _
8+
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=testvb.db") _
9+
.UseAutoSyncStructure(True) _
10+
.UseMonitorCommand(Sub(cmd) Trace.WriteLine(cmd.CommandText)) _
11+
.Build()
12+
13+
REM Microsoft.VisualBasic.CompilerServices.Operators.CompareString()
14+
Dim List1 = fsql.Select(Of Testvb).Where(Function(a) a.Id = 100).ToList()
15+
Dim List2 = fsql.Select(Of Testvb).Where(Function(a) a.Title = "xxx").ToList()
16+
Dim List3 = fsql.Select(Of Testvb).Where(Function(a) a.Title <> "xxx").ToList()
17+
18+
fsql.Dispose()
19+
End Sub
20+
End Module
21+
22+
Class Testvb
23+
Property Id As Integer
24+
Property Title As String
25+
End Class
26+

Examples/test_vb/test_vb.vbproj

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<RootNamespace>test_vb</RootNamespace>
6+
<TargetFramework>netcoreapp3.1</TargetFramework>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" />
11+
</ItemGroup>
12+
13+
</Project>

FreeSql.sln

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "orm_vs_net40", "Examples\or
6868
EndProject
6969
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Generator", "Extensions\FreeSql.Generator\FreeSql.Generator.csproj", "{6A3A4470-7DF7-411B-AAD7-755D7A9DB5A4}"
7070
EndProject
71+
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "test_vb", "Examples\test_vb\test_vb.vbproj", "{0A2206B1-1D34-45F4-B028-E3C5D6F02295}"
72+
EndProject
7173
Global
7274
GlobalSection(SolutionConfigurationPlatforms) = preSolution
7375
Debug|Any CPU = Debug|Any CPU
@@ -402,6 +404,18 @@ Global
402404
{6A3A4470-7DF7-411B-AAD7-755D7A9DB5A4}.Release|x64.Build.0 = Release|Any CPU
403405
{6A3A4470-7DF7-411B-AAD7-755D7A9DB5A4}.Release|x86.ActiveCfg = Release|Any CPU
404406
{6A3A4470-7DF7-411B-AAD7-755D7A9DB5A4}.Release|x86.Build.0 = Release|Any CPU
407+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
408+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Debug|Any CPU.Build.0 = Debug|Any CPU
409+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Debug|x64.ActiveCfg = Debug|Any CPU
410+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Debug|x64.Build.0 = Debug|Any CPU
411+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Debug|x86.ActiveCfg = Debug|Any CPU
412+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Debug|x86.Build.0 = Debug|Any CPU
413+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Release|Any CPU.ActiveCfg = Release|Any CPU
414+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Release|Any CPU.Build.0 = Release|Any CPU
415+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Release|x64.ActiveCfg = Release|Any CPU
416+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Release|x64.Build.0 = Release|Any CPU
417+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Release|x86.ActiveCfg = Release|Any CPU
418+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295}.Release|x86.Build.0 = Release|Any CPU
405419
EndGlobalSection
406420
GlobalSection(SolutionProperties) = preSolution
407421
HideSolutionNode = FALSE
@@ -426,6 +440,7 @@ Global
426440
{C57444BA-8BF7-4790-A864-7F237123219B} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
427441
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23} = {94C8A78D-AA15-47B2-A348-530CD86BFC1B}
428442
{6A3A4470-7DF7-411B-AAD7-755D7A9DB5A4} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
443+
{0A2206B1-1D34-45F4-B028-E3C5D6F02295} = {94C8A78D-AA15-47B2-A348-530CD86BFC1B}
429444
EndGlobalSection
430445
GlobalSection(ExtensibilityGlobals) = postSolution
431446
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}

FreeSql/Internal/CommonExpression.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,20 @@ static string GetBoolString(string sql)
417417
}
418418
public string ExpressionBinary(string oper, Expression leftExp, Expression rightExp, ExpTSC tsc)
419419
{
420+
if (leftExp.NodeType == ExpressionType.Call &&
421+
rightExp.NodeType == ExpressionType.Constant &&
422+
new[] { "=", "<>" }.Contains(oper))
423+
{
424+
var leftExpCall = leftExp as MethodCallExpression;
425+
//vb 语法,将字符串比较转换为了 CompareString
426+
if (leftExpCall.Method.Name == "CompareString" &&
427+
leftExpCall.Method.DeclaringType?.FullName == "Microsoft.VisualBasic.CompilerServices.Operators" &&
428+
leftExpCall.Arguments.Count == 3 &&
429+
leftExpCall.Arguments[2].Type == typeof(bool) &&
430+
rightExp.Type == typeof(int) &&
431+
(int)(rightExp as ConstantExpression).Value == 0)
432+
return ExpressionBinary(oper, leftExpCall.Arguments[0], leftExpCall.Arguments[1], tsc);
433+
}
420434
switch (oper)
421435
{
422436
case "OR":

Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseAdo/OdbcGBaseConnectionPool.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
using System.Text.RegularExpressions;
1010
using System.Threading.Tasks;
1111

12+
//jdbc:gbasedbt-sqli://192.168.164.10:9088/gbasedb:GBASEDBTSERVER=gbaseserver;DB_LOCALE=zh_CN.GB18030-2000;CLIENT_LOCALE=zh_CN.GB18030-2000;NEWCODESET=GB18030,GB18030-2000,5488;
13+
1214
namespace FreeSql.Odbc.GBase
1315
{
1416

0 commit comments

Comments
 (0)