Add SqlFunc.ContainsArrayUseSqlParameters

This commit is contained in:
610262374@qq.com 2019-06-09 20:51:57 +08:00
parent cff0df9c11
commit 51af495f22
6 changed files with 85 additions and 5 deletions

View File

@ -78,6 +78,9 @@ namespace OrmTest
CheckMan = saleOrderInfo.CheckMan,
CheckTime = DateTime.Now
}, o => o.OrderSn == saleOrderInfo.OrderSn && o.OrderStatus != 1);
var ids = Enumerable.Range(1, 11).ToList();
var list8=Db.Queryable<Order>().Where(it => SqlFunc.ContainsArrayUseSqlParameters(ids, it.Id)).ToList();
}
public static class IEnumerbleContains

View File

@ -8,8 +8,9 @@ namespace SqlSugar
{
public class MethodCallExpressionModel
{
public List<MethodCallExpressionArgs> Args { get; set; }
public string Name { get; internal set; }
public List<MethodCallExpressionArgs> Args { get; set; }
public string Name { get; set; }
public dynamic Data { get; set; }
}
public class MethodCallExpressionArgs
@ -17,6 +18,6 @@ namespace SqlSugar
public bool IsMember { get; set; }
public object MemberName { get; set; }
public object MemberValue { get; set; }
public Type Type { get; set; }
public Type Type { get; set; }
}
}

View File

@ -93,6 +93,44 @@ namespace SqlSugar
}
}
public virtual string ContainsArrayUseSqlParameters(MethodCallExpressionModel model)
{
var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue;
List<object> inValues = new List<object>();
if (inValueIEnumerable != null)
{
foreach (var item in inValueIEnumerable)
{
if (item != null && item.GetType().IsEnum())
{
inValues.Add(Convert.ToInt64(item));
}
else
{
inValues.Add(item);
}
}
}
var value = model.Args[1].MemberName;
string inValueString = null;
if (inValues != null && inValues.Count > 0)
{
for (int i = 0; i < inValues.Count; i++)
{
inValueString += model.Data + "_" + i+",";
}
}
if (inValueString.IsNullOrEmpty())
{
return " (1=2) ";
}
else
{
inValueString=inValueString.TrimEnd(',');
return string.Format(" ({0} IN ({1})) ", value, inValueString);
}
}
public virtual string Equals(MethodCallExpressionModel model)
{
var parameter = model.Args[0];

View File

@ -20,6 +20,7 @@ namespace SqlSugar
string Trim(MethodCallExpressionModel model);
string Contains(MethodCallExpressionModel model);
string ContainsArray(MethodCallExpressionModel model);
string ContainsArrayUseSqlParameters(MethodCallExpressionModel model);
string Equals(MethodCallExpressionModel model);
string DateIsSameDay(MethodCallExpressionModel model);
string DateIsSameByType(MethodCallExpressionModel model);

View File

@ -37,9 +37,21 @@ namespace SqlSugar
{
return thisValue.Contains(parameterValue);
}
public static bool ContainsArray<T>(T[] thisValue, object parameterValue)
public static bool ContainsArray<T>(T[] thisValue, object InField)
{
return thisValue.Contains((T)parameterValue);
return thisValue.Contains((T)InField);
}
public static bool ContainsArray<T>(List<T> thisValue, object InField)
{
return thisValue.Contains((T)InField);
}
public static bool ContainsArrayUseSqlParameters<T>(List<T> thisValue, object InField)
{
return thisValue.Contains((T)InField);
}
public static bool ContainsArrayUseSqlParameters<T>(T[] thisValue, object InField)
{
return thisValue.Contains((T)InField);
}
public static bool StartsWith(string thisValue, string parameterValue)
{

View File

@ -1,5 +1,6 @@
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
@ -539,6 +540,30 @@ namespace SqlSugar
var caResult = this.Context.DbMehtods.ContainsArray(model);
this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString());
return caResult;
case "ContainsArrayUseSqlParameters":
if (model.Args[0].MemberValue == null)
{
var first = this.Context.Parameters.FirstOrDefault(it => it.ParameterName == model.Args[0].MemberName.ObjToString());
if (first.HasValue())
{
model.Args[0].MemberValue = first.Value;
}
}
model.Data =this.Context.SqlParameterKeyWord+"INP_"+this.Context.ParameterIndex;
this.Context.ParameterIndex++;
if (model.Args[0].MemberValue.HasValue())
{
var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue;
int i = 0;
foreach (var item in inValueIEnumerable)
{
this.Context.Parameters.Add(new SugarParameter(model.Data+"_"+i,item));
i++;
}
}
var caResult2 = this.Context.DbMehtods.ContainsArrayUseSqlParameters(model);
this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString());
return caResult2;
case "Equals":
return this.Context.DbMehtods.Equals(model);
case "DateIsSame":