mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
repair bug: ILIst.Contains Expression #16
This commit is contained in:
parent
c7394b78e7
commit
4667698d54
@ -1,5 +1,6 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
@ -24,6 +25,20 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
var sql1111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
var sql1111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
||||||
var sql1122 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
var sql1122 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
||||||
var sql1133 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
var sql1133 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
//in not in
|
||||||
|
var sql11111 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt)).ToList();
|
||||||
|
var sql11222 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql11333 = select.Where(a => !new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
var sql11111a = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt)).ToList();
|
||||||
|
var sql11222b = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql11333c = select.Where(a => !new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
var inarray2 = new List<int>() { 1, 2, 3 };
|
||||||
|
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
||||||
|
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
@ -23,6 +24,21 @@ namespace FreeSql.Tests.OracleExpression {
|
|||||||
var sql1111 = select.Where(a => inarray.Contains(a.Int)).ToList();
|
var sql1111 = select.Where(a => inarray.Contains(a.Int)).ToList();
|
||||||
//var sql1122 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
|
//var sql1122 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
|
||||||
var sql1133 = select.Where(a => !inarray.Contains(a.Int)).ToList();
|
var sql1133 = select.Where(a => !inarray.Contains(a.Int)).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
//in not in
|
||||||
|
var sql11111 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.Int)).ToList();
|
||||||
|
//var sql11222 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.Int) == false).ToList();
|
||||||
|
var sql11333 = select.Where(a => !new List<int>() { 1, 2, 3 }.Contains(a.Int)).ToList();
|
||||||
|
|
||||||
|
var sql11111a = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.Int)).ToList();
|
||||||
|
//var sql11222b = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.Int) == false).ToList();
|
||||||
|
var sql11333c = select.Where(a => !new List<int>(new[] { 1, 2, 3 }).Contains(a.Int)).ToList();
|
||||||
|
|
||||||
|
var inarray2 = new List<int>() { 1, 2, 3 };
|
||||||
|
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
|
||||||
|
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
|
||||||
|
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
|
@ -37,6 +37,21 @@ namespace FreeSql.Tests.PostgreSQLExpression {
|
|||||||
var sql1122 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToSql();
|
var sql1122 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToSql();
|
||||||
var sql1133 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToSql();
|
var sql1133 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToSql();
|
||||||
|
|
||||||
|
//in not in
|
||||||
|
var sql11111 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt)).ToList();
|
||||||
|
var sql11222 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql11333 = select.Where(a => !new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
var sql11111a = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt)).ToList();
|
||||||
|
var sql11222b = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql11333c = select.Where(a => !new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
var inarray2 = new List<int>() { 1, 2, 3 };
|
||||||
|
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
||||||
|
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
|
||||||
var sql3 = select.Where(a => a.testFieldIntArray.Any()).ToList();
|
var sql3 = select.Where(a => a.testFieldIntArray.Any()).ToList();
|
||||||
var sql4 = select.Where(a => a.testFieldIntArray.Any() == false).ToList();
|
var sql4 = select.Where(a => a.testFieldIntArray.Any() == false).ToList();
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using FreeSql.Tests.DataContext.SqlServer;
|
using FreeSql.Tests.DataContext.SqlServer;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
@ -28,6 +29,20 @@ namespace FreeSql.Tests.SqlServerExpression {
|
|||||||
var sql1111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
var sql1111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
||||||
//var sql1122 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
//var sql1122 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
||||||
var sql1133 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
var sql1133 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
//in not in
|
||||||
|
var sql11111 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt)).ToList();
|
||||||
|
//var sql11222 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql11333 = select.Where(a => !new List<int>() { 1, 2, 3 }.Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
var sql11111a = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt)).ToList();
|
||||||
|
//var sql11222b = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql11333c = select.Where(a => !new List<int>(new[] { 1, 2, 3 }).Contains(a.testFieldInt)).ToList();
|
||||||
|
|
||||||
|
var inarray2 = new List<int>() { 1, 2, 3 };
|
||||||
|
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
|
||||||
|
//var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
|
||||||
|
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
@ -23,6 +24,20 @@ namespace FreeSql.Tests.SqliteExpression {
|
|||||||
var sql1111 = select.Where(a => inarray.Contains(a.Int)).ToList();
|
var sql1111 = select.Where(a => inarray.Contains(a.Int)).ToList();
|
||||||
//var sql1122 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
|
//var sql1122 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
|
||||||
var sql1133 = select.Where(a => !inarray.Contains(a.Int)).ToList();
|
var sql1133 = select.Where(a => !inarray.Contains(a.Int)).ToList();
|
||||||
|
|
||||||
|
//in not in
|
||||||
|
var sql11111 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.Int)).ToList();
|
||||||
|
//var sql11222 = select.Where(a => new List<int>() { 1, 2, 3 }.Contains(a.Int) == false).ToList();
|
||||||
|
var sql11333 = select.Where(a => !new List<int>() { 1, 2, 3 }.Contains(a.Int)).ToList();
|
||||||
|
|
||||||
|
var sql11111a = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.Int)).ToList();
|
||||||
|
//var sql11222b = select.Where(a => new List<int>(new[] { 1, 2, 3 }).Contains(a.Int) == false).ToList();
|
||||||
|
var sql11333c = select.Where(a => !new List<int>(new[] { 1, 2, 3 }).Contains(a.Int)).ToList();
|
||||||
|
|
||||||
|
var inarray2 = new List<int>() { 1, 2, 3 };
|
||||||
|
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
|
||||||
|
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
|
||||||
|
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using FreeSql.Internal;
|
using FreeSql.Internal;
|
||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal.Model;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
@ -21,7 +22,7 @@ namespace FreeSql.MySql {
|
|||||||
if (objType?.FullName == "System.Byte[]") return null;
|
if (objType?.FullName == "System.Byte[]") return null;
|
||||||
|
|
||||||
var argIndex = 0;
|
var argIndex = 0;
|
||||||
if (objType == null && callExp.Method.DeclaringType.FullName == typeof(Enumerable).FullName) {
|
if (objType == null && callExp.Method.DeclaringType == typeof(Enumerable)) {
|
||||||
objExp = callExp.Arguments.FirstOrDefault();
|
objExp = callExp.Arguments.FirstOrDefault();
|
||||||
objType = objExp?.Type;
|
objType = objExp?.Type;
|
||||||
argIndex++;
|
argIndex++;
|
||||||
@ -29,7 +30,7 @@ namespace FreeSql.MySql {
|
|||||||
if (objType == null) objType = callExp.Method.DeclaringType;
|
if (objType == null) objType = callExp.Method.DeclaringType;
|
||||||
if (objType != null) {
|
if (objType != null) {
|
||||||
var left = objExp == null ? null : getExp(objExp);
|
var left = objExp == null ? null : getExp(objExp);
|
||||||
if (objType.IsArray == true) {
|
if (objType.IsArray || typeof(IList).IsAssignableFrom(callExp.Method.DeclaringType)) {
|
||||||
switch (callExp.Method.Name) {
|
switch (callExp.Method.Name) {
|
||||||
case "Contains":
|
case "Contains":
|
||||||
//判断 in
|
//判断 in
|
||||||
@ -46,7 +47,27 @@ namespace FreeSql.MySql {
|
|||||||
if (a > 0) arrSb.Append(",");
|
if (a > 0) arrSb.Append(",");
|
||||||
arrSb.Append(getExp(arrExp.Expressions[a]));
|
arrSb.Append(getExp(arrExp.Expressions[a]));
|
||||||
}
|
}
|
||||||
|
if (arrSb.Length == 1) arrSb.Append("NULL");
|
||||||
return arrSb.Append(")").ToString();
|
return arrSb.Append(")").ToString();
|
||||||
|
case ExpressionType.ListInit:
|
||||||
|
var listExp = exp as ListInitExpression;
|
||||||
|
var listSb = new StringBuilder();
|
||||||
|
listSb.Append("(");
|
||||||
|
for (var a = 0; a < listExp.Initializers.Count; a++) {
|
||||||
|
if (listExp.Initializers[a].Arguments.Any() == false) continue;
|
||||||
|
if (a > 0) listSb.Append(",");
|
||||||
|
listSb.Append(getExp(listExp.Initializers[a].Arguments.FirstOrDefault()));
|
||||||
|
}
|
||||||
|
if (listSb.Length == 1) listSb.Append("NULL");
|
||||||
|
return listSb.Append(")").ToString();
|
||||||
|
case ExpressionType.New:
|
||||||
|
var newExp = exp as NewExpression;
|
||||||
|
if (typeof(IList).IsAssignableFrom(newExp.Type)) {
|
||||||
|
if (newExp.Arguments.Count == 0) return "(NULL)";
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(newExp.Arguments[0].Type) == false) return "(NULL)";
|
||||||
|
return getExp(newExp.Arguments[0]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using FreeSql.Internal;
|
using FreeSql.Internal;
|
||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal.Model;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
@ -21,7 +22,7 @@ namespace FreeSql.Oracle {
|
|||||||
if (objType?.FullName == "System.Byte[]") return null;
|
if (objType?.FullName == "System.Byte[]") return null;
|
||||||
|
|
||||||
var argIndex = 0;
|
var argIndex = 0;
|
||||||
if (objType == null && callExp.Method.DeclaringType.FullName == typeof(Enumerable).FullName) {
|
if (objType == null && callExp.Method.DeclaringType == typeof(Enumerable)) {
|
||||||
objExp = callExp.Arguments.FirstOrDefault();
|
objExp = callExp.Arguments.FirstOrDefault();
|
||||||
objType = objExp?.Type;
|
objType = objExp?.Type;
|
||||||
argIndex++;
|
argIndex++;
|
||||||
@ -29,7 +30,7 @@ namespace FreeSql.Oracle {
|
|||||||
if (objType == null) objType = callExp.Method.DeclaringType;
|
if (objType == null) objType = callExp.Method.DeclaringType;
|
||||||
if (objType != null) {
|
if (objType != null) {
|
||||||
var left = objExp == null ? null : getExp(objExp);
|
var left = objExp == null ? null : getExp(objExp);
|
||||||
if (objType.IsArray == true) {
|
if (objType.IsArray || typeof(IList).IsAssignableFrom(callExp.Method.DeclaringType)) {
|
||||||
switch (callExp.Method.Name) {
|
switch (callExp.Method.Name) {
|
||||||
case "Contains":
|
case "Contains":
|
||||||
//判断 in
|
//判断 in
|
||||||
@ -46,7 +47,27 @@ namespace FreeSql.Oracle {
|
|||||||
if (a > 0) arrSb.Append(",");
|
if (a > 0) arrSb.Append(",");
|
||||||
arrSb.Append(getExp(arrExp.Expressions[a]));
|
arrSb.Append(getExp(arrExp.Expressions[a]));
|
||||||
}
|
}
|
||||||
|
if (arrSb.Length == 1) arrSb.Append("NULL");
|
||||||
return arrSb.Append(")").ToString();
|
return arrSb.Append(")").ToString();
|
||||||
|
case ExpressionType.ListInit:
|
||||||
|
var listExp = exp as ListInitExpression;
|
||||||
|
var listSb = new StringBuilder();
|
||||||
|
listSb.Append("(");
|
||||||
|
for (var a = 0; a < listExp.Initializers.Count; a++) {
|
||||||
|
if (listExp.Initializers[a].Arguments.Any() == false) continue;
|
||||||
|
if (a > 0) listSb.Append(",");
|
||||||
|
listSb.Append(getExp(listExp.Initializers[a].Arguments.FirstOrDefault()));
|
||||||
|
}
|
||||||
|
if (listSb.Length == 1) listSb.Append("NULL");
|
||||||
|
return listSb.Append(")").ToString();
|
||||||
|
case ExpressionType.New:
|
||||||
|
var newExp = exp as NewExpression;
|
||||||
|
if (typeof(IList).IsAssignableFrom(newExp.Type)) {
|
||||||
|
if (newExp.Arguments.Count == 0) return "(NULL)";
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(newExp.Arguments[0].Type) == false) return "(NULL)";
|
||||||
|
return getExp(newExp.Arguments[0]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal.Model;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
@ -26,7 +27,7 @@ namespace FreeSql.PostgreSQL {
|
|||||||
if (objType?.FullName == "System.Byte[]") return null;
|
if (objType?.FullName == "System.Byte[]") return null;
|
||||||
|
|
||||||
var argIndex = 0;
|
var argIndex = 0;
|
||||||
if (objType == null && callExp.Method.DeclaringType.FullName == typeof(Enumerable).FullName) {
|
if (objType == null && callExp.Method.DeclaringType == typeof(Enumerable)) {
|
||||||
objExp = callExp.Arguments.FirstOrDefault();
|
objExp = callExp.Arguments.FirstOrDefault();
|
||||||
objType = objExp?.Type;
|
objType = objExp?.Type;
|
||||||
argIndex++;
|
argIndex++;
|
||||||
@ -34,7 +35,7 @@ namespace FreeSql.PostgreSQL {
|
|||||||
if (objType == null) objType = callExp.Method.DeclaringType;
|
if (objType == null) objType = callExp.Method.DeclaringType;
|
||||||
if (objType != null) {
|
if (objType != null) {
|
||||||
var left = objExp == null ? null : getExp(objExp);
|
var left = objExp == null ? null : getExp(objExp);
|
||||||
if (objType.IsArray == true) {
|
if (objType.IsArray || typeof(IList).IsAssignableFrom(callExp.Method.DeclaringType)) {
|
||||||
switch (callExp.Method.Name) {
|
switch (callExp.Method.Name) {
|
||||||
case "Any":
|
case "Any":
|
||||||
if (left.StartsWith("(") || left.EndsWith(")")) left = $"array[{left.TrimStart('(').TrimEnd(')')}]";
|
if (left.StartsWith("(") || left.EndsWith(")")) left = $"array[{left.TrimStart('(').TrimEnd(')')}]";
|
||||||
@ -141,7 +142,27 @@ namespace FreeSql.PostgreSQL {
|
|||||||
if (a > 0) arrSb.Append(",");
|
if (a > 0) arrSb.Append(",");
|
||||||
arrSb.Append(getExp(arrExp.Expressions[a]));
|
arrSb.Append(getExp(arrExp.Expressions[a]));
|
||||||
}
|
}
|
||||||
|
if (arrSb.Length == 1) arrSb.Append("NULL");
|
||||||
return arrSb.Append("]").ToString();
|
return arrSb.Append("]").ToString();
|
||||||
|
case ExpressionType.ListInit:
|
||||||
|
var listExp = exp as ListInitExpression;
|
||||||
|
var listSb = new StringBuilder();
|
||||||
|
listSb.Append("(");
|
||||||
|
for (var a = 0; a < listExp.Initializers.Count; a++) {
|
||||||
|
if (listExp.Initializers[a].Arguments.Any() == false) continue;
|
||||||
|
if (a > 0) listSb.Append(",");
|
||||||
|
listSb.Append(getExp(listExp.Initializers[a].Arguments.FirstOrDefault()));
|
||||||
|
}
|
||||||
|
if (listSb.Length == 1) listSb.Append("NULL");
|
||||||
|
return listSb.Append(")").ToString();
|
||||||
|
case ExpressionType.New:
|
||||||
|
var newExp = exp as NewExpression;
|
||||||
|
if (typeof(IList).IsAssignableFrom(newExp.Type)) {
|
||||||
|
if (newExp.Arguments.Count == 0) return "(NULL)";
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(newExp.Arguments[0].Type) == false) return "(NULL)";
|
||||||
|
return getExp(newExp.Arguments[0]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using FreeSql.Internal;
|
using FreeSql.Internal;
|
||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal.Model;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
@ -21,7 +22,7 @@ namespace FreeSql.SqlServer {
|
|||||||
if (objType?.FullName == "System.Byte[]") return null;
|
if (objType?.FullName == "System.Byte[]") return null;
|
||||||
|
|
||||||
var argIndex = 0;
|
var argIndex = 0;
|
||||||
if (objType == null && callExp.Method.DeclaringType.FullName == typeof(Enumerable).FullName) {
|
if (objType == null && callExp.Method.DeclaringType == typeof(Enumerable)) {
|
||||||
objExp = callExp.Arguments.FirstOrDefault();
|
objExp = callExp.Arguments.FirstOrDefault();
|
||||||
objType = objExp?.Type;
|
objType = objExp?.Type;
|
||||||
argIndex++;
|
argIndex++;
|
||||||
@ -29,7 +30,7 @@ namespace FreeSql.SqlServer {
|
|||||||
if (objType == null) objType = callExp.Method.DeclaringType;
|
if (objType == null) objType = callExp.Method.DeclaringType;
|
||||||
if (objType != null) {
|
if (objType != null) {
|
||||||
var left = objExp == null ? null : getExp(objExp);
|
var left = objExp == null ? null : getExp(objExp);
|
||||||
if (objType.IsArray == true) {
|
if (objType.IsArray || typeof(IList).IsAssignableFrom(callExp.Method.DeclaringType)) {
|
||||||
switch (callExp.Method.Name) {
|
switch (callExp.Method.Name) {
|
||||||
case "Contains":
|
case "Contains":
|
||||||
//判断 in
|
//判断 in
|
||||||
@ -46,7 +47,27 @@ namespace FreeSql.SqlServer {
|
|||||||
if (a > 0) arrSb.Append(",");
|
if (a > 0) arrSb.Append(",");
|
||||||
arrSb.Append(getExp(arrExp.Expressions[a]));
|
arrSb.Append(getExp(arrExp.Expressions[a]));
|
||||||
}
|
}
|
||||||
|
if (arrSb.Length == 1) arrSb.Append("NULL");
|
||||||
return arrSb.Append(")").ToString();
|
return arrSb.Append(")").ToString();
|
||||||
|
case ExpressionType.ListInit:
|
||||||
|
var listExp = exp as ListInitExpression;
|
||||||
|
var listSb = new StringBuilder();
|
||||||
|
listSb.Append("(");
|
||||||
|
for (var a = 0; a < listExp.Initializers.Count; a++) {
|
||||||
|
if (listExp.Initializers[a].Arguments.Any() == false) continue;
|
||||||
|
if (a > 0) listSb.Append(",");
|
||||||
|
listSb.Append(getExp(listExp.Initializers[a].Arguments.FirstOrDefault()));
|
||||||
|
}
|
||||||
|
if (listSb.Length == 1) listSb.Append("NULL");
|
||||||
|
return listSb.Append(")").ToString();
|
||||||
|
case ExpressionType.New:
|
||||||
|
var newExp = exp as NewExpression;
|
||||||
|
if (typeof(IList).IsAssignableFrom(newExp.Type)) {
|
||||||
|
if (newExp.Arguments.Count == 0) return "(NULL)";
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(newExp.Arguments[0].Type) == false) return "(NULL)";
|
||||||
|
return getExp(newExp.Arguments[0]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using FreeSql.Internal;
|
using FreeSql.Internal;
|
||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal.Model;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
@ -21,7 +22,7 @@ namespace FreeSql.Sqlite {
|
|||||||
if (objType?.FullName == "System.Byte[]") return null;
|
if (objType?.FullName == "System.Byte[]") return null;
|
||||||
|
|
||||||
var argIndex = 0;
|
var argIndex = 0;
|
||||||
if (objType == null && callExp.Method.DeclaringType.FullName == typeof(Enumerable).FullName) {
|
if (objType == null && callExp.Method.DeclaringType == typeof(Enumerable)) {
|
||||||
objExp = callExp.Arguments.FirstOrDefault();
|
objExp = callExp.Arguments.FirstOrDefault();
|
||||||
objType = objExp?.Type;
|
objType = objExp?.Type;
|
||||||
argIndex++;
|
argIndex++;
|
||||||
@ -29,7 +30,7 @@ namespace FreeSql.Sqlite {
|
|||||||
if (objType == null) objType = callExp.Method.DeclaringType;
|
if (objType == null) objType = callExp.Method.DeclaringType;
|
||||||
if (objType != null) {
|
if (objType != null) {
|
||||||
var left = objExp == null ? null : getExp(objExp);
|
var left = objExp == null ? null : getExp(objExp);
|
||||||
if (objType.IsArray == true) {
|
if (objType.IsArray || typeof(IList).IsAssignableFrom(callExp.Method.DeclaringType)) {
|
||||||
switch (callExp.Method.Name) {
|
switch (callExp.Method.Name) {
|
||||||
case "Contains":
|
case "Contains":
|
||||||
//判断 in
|
//判断 in
|
||||||
@ -46,7 +47,27 @@ namespace FreeSql.Sqlite {
|
|||||||
if (a > 0) arrSb.Append(",");
|
if (a > 0) arrSb.Append(",");
|
||||||
arrSb.Append(getExp(arrExp.Expressions[a]));
|
arrSb.Append(getExp(arrExp.Expressions[a]));
|
||||||
}
|
}
|
||||||
|
if (arrSb.Length == 1) arrSb.Append("NULL");
|
||||||
return arrSb.Append(")").ToString();
|
return arrSb.Append(")").ToString();
|
||||||
|
case ExpressionType.ListInit:
|
||||||
|
var listExp = exp as ListInitExpression;
|
||||||
|
var listSb = new StringBuilder();
|
||||||
|
listSb.Append("(");
|
||||||
|
for (var a = 0; a < listExp.Initializers.Count; a++) {
|
||||||
|
if (listExp.Initializers[a].Arguments.Any() == false) continue;
|
||||||
|
if (a > 0) listSb.Append(",");
|
||||||
|
listSb.Append(getExp(listExp.Initializers[a].Arguments.FirstOrDefault()));
|
||||||
|
}
|
||||||
|
if (listSb.Length == 1) listSb.Append("NULL");
|
||||||
|
return listSb.Append(")").ToString();
|
||||||
|
case ExpressionType.New:
|
||||||
|
var newExp = exp as NewExpression;
|
||||||
|
if (typeof(IList).IsAssignableFrom(newExp.Type)) {
|
||||||
|
if (newExp.Arguments.Count == 0) return "(NULL)";
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(newExp.Arguments[0].Type) == false) return "(NULL)";
|
||||||
|
return getExp(newExp.Arguments[0]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user