|
@@ -27,6 +27,7 @@ using System.Collections.Concurrent;
|
|
|
using DataType = Microsoft.Azure.Documents.DataType;
|
|
|
using RequestOptions = Microsoft.Azure.Documents.Client.RequestOptions;
|
|
|
using PartitionKey = Microsoft.Azure.Documents.PartitionKey;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
|
|
|
namespace TEAMModelOS.SDK.Module.AzureCosmosDB.Implements
|
|
|
{ /// <summary>
|
|
@@ -668,19 +669,58 @@ namespace TEAMModelOS.SDK.Module.AzureCosmosDB.Implements
|
|
|
|
|
|
private static string GenSql(object obj, string key)
|
|
|
{
|
|
|
- Type s = obj.GetType();
|
|
|
- TypeCode typeCode = Type.GetTypeCode(s);
|
|
|
- return typeCode switch
|
|
|
+
|
|
|
+ if (obj is JArray array)
|
|
|
{
|
|
|
- TypeCode.String => " and c." + key + "=" + "'" + obj.ToString() + "'",
|
|
|
- TypeCode.Int32 => " and c." + key + "=" + int.Parse(obj.ToString()),
|
|
|
- TypeCode.Double => " and c." + key + "=" + double.Parse(obj.ToString()),
|
|
|
- //case TypeCode.Byte: return "and c." + key + "=" + (Byte)obj ;
|
|
|
- TypeCode.Boolean => " and c." + key + "=" + bool.Parse(obj.ToString()),
|
|
|
- TypeCode.DateTime => " and c." + key + "=" + (DateTime)obj,
|
|
|
- TypeCode.Int64 => " and c." + key + "=" + long.Parse(obj.ToString()),
|
|
|
- _ => null,
|
|
|
- };
|
|
|
+ StringBuilder sql = new StringBuilder(" and c." + key + " in (");
|
|
|
+ foreach (JValue obja in array) {
|
|
|
+ if (obja.Value is string a) {
|
|
|
+ sql.Append("'" + a + "',");
|
|
|
+ }
|
|
|
+ if (obja.Value is int b)
|
|
|
+ {
|
|
|
+ sql.Append(b + ",");
|
|
|
+
|
|
|
+ }
|
|
|
+ if (obja.Value is double c)
|
|
|
+ {
|
|
|
+ sql.Append(c + ",");
|
|
|
+ }
|
|
|
+ if (obja.Value is bool d)
|
|
|
+ {
|
|
|
+ sql.Append(d + ",");
|
|
|
+
|
|
|
+ }
|
|
|
+ if (obja.Value is long e)
|
|
|
+ {
|
|
|
+ sql.Append(e + ",");
|
|
|
+ }
|
|
|
+ if (obja.Value is DateTime f)
|
|
|
+ {
|
|
|
+ sql.Append(f + ",");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ string sqls= sql.ToString().Substring(0, sql.Length - 1);
|
|
|
+ sqls += ") ";
|
|
|
+ return sqls;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Type s = obj.GetType();
|
|
|
+ TypeCode typeCode = Type.GetTypeCode(s);
|
|
|
+
|
|
|
+ return typeCode switch
|
|
|
+ {
|
|
|
+ TypeCode.String => " and c." + key + "=" + "'" + obj.ToString() + "'",
|
|
|
+ TypeCode.Int32 => " and c." + key + "=" + int.Parse(obj.ToString()),
|
|
|
+ TypeCode.Double => " and c." + key + "=" + double.Parse(obj.ToString()),
|
|
|
+ //case TypeCode.Byte: return "and c." + key + "=" + (Byte)obj ;
|
|
|
+ TypeCode.Boolean => " and c." + key + "=" + bool.Parse(obj.ToString()),
|
|
|
+ TypeCode.DateTime => " and c." + key + "=" + (DateTime)obj,
|
|
|
+ TypeCode.Int64 => " and c." + key + "=" + long.Parse(obj.ToString()),
|
|
|
+ _ => null,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public IQueryable<dynamic> FindByDict(string CollectionName, Dictionary<string, object> dict)
|