repair bug: ILIst.Contains Expression #16

This commit is contained in:
28810 2019-03-16 18:24:57 +08:00
parent c7394b78e7
commit 4667698d54
10 changed files with 191 additions and 10 deletions

View File

@ -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")]

View File

@ -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")]

View File

@ -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();

View File

@ -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")]

View File

@ -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")]

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;
} }