|
@@ -148,26 +148,28 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
return entitys.Count;
|
|
return entitys.Count;
|
|
}
|
|
}
|
|
|
|
|
|
- public async Task<T> FindById<T>(string id) where T : TableEntity, new()
|
|
|
|
|
|
+ public async Task<T> FindByRowKey<T>(string RowKey) where T : TableEntity, new()
|
|
{
|
|
{
|
|
string TableName = await InitializeTable<T>();
|
|
string TableName = await InitializeTable<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
- if (!string.IsNullOrEmpty(id))
|
|
|
|
|
|
+ if (!string.IsNullOrEmpty(RowKey))
|
|
{
|
|
{
|
|
- exQuery.Where(TableQuery.GenerateFilterCondition("Id", QueryComparisons.Equal, id));
|
|
|
|
- return await QueryObject<T>(exQuery , TableName);
|
|
|
|
|
|
+ string typeStr = SwitchType(RowKey, "RowKey");
|
|
|
|
+ exQuery.Where(typeStr);
|
|
|
|
+ // exQuery.Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, id));
|
|
|
|
+ return await QueryObject<T>(exQuery, TableName);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- return null;
|
|
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public async Task<List<T>> FindListByDict<T>(Dictionary<string, object> dict) where T : TableEntity, new()
|
|
public async Task<List<T>> FindListByDict<T>(Dictionary<string, object> dict) where T : TableEntity, new()
|
|
{
|
|
{
|
|
- string TableName= await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
StringBuilder builder = new StringBuilder();
|
|
StringBuilder builder = new StringBuilder();
|
|
if (null != dict && dict.Count > 0)
|
|
if (null != dict && dict.Count > 0)
|
|
@@ -178,13 +180,19 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
{
|
|
{
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
{
|
|
{
|
|
|
|
+ string typeStr = SwitchType(dict[key], key);
|
|
|
|
+
|
|
if (index == 1)
|
|
if (index == 1)
|
|
{
|
|
{
|
|
- builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ //builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(typeStr);
|
|
|
|
+
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ //builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(" " + TableOperators.And + " " + typeStr);
|
|
|
|
+
|
|
}
|
|
}
|
|
index++;
|
|
index++;
|
|
}
|
|
}
|
|
@@ -193,30 +201,35 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
exQuery.Where(builder.ToString());
|
|
exQuery.Where(builder.ToString());
|
|
return await QueryList<T>(exQuery, TableName);
|
|
return await QueryList<T>(exQuery, TableName);
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- return null;
|
|
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public async Task<List<T>> FindListByKey<T>(string key, string value) where T : TableEntity, new()
|
|
|
|
|
|
+ public async Task<List<T>> FindListByKey<T>(string key, object value) where T : TableEntity, new()
|
|
{
|
|
{
|
|
string TableName = await InitializeTable<T>();
|
|
string TableName = await InitializeTable<T>();
|
|
|
|
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
- if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
|
|
|
|
|
|
+ if (!string.IsNullOrEmpty(key) &&null!= value && !string.IsNullOrEmpty(value.ToString()))
|
|
{
|
|
{
|
|
- exQuery.Where(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, value));
|
|
|
|
|
|
+
|
|
|
|
+ string typeStr = SwitchType(value, key);
|
|
|
|
+ exQuery.Where(typeStr);
|
|
|
|
+ //exQuery.Where(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, value));
|
|
return await QueryList<T>(exQuery, TableName);
|
|
return await QueryList<T>(exQuery, TableName);
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- return null;
|
|
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
public async Task<T> FindOneByDict<T>(IDictionary<string, object> dict) where T : TableEntity, new()
|
|
public async Task<T> FindOneByDict<T>(IDictionary<string, object> dict) where T : TableEntity, new()
|
|
{
|
|
{
|
|
- string TableName = await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
StringBuilder builder = new StringBuilder();
|
|
StringBuilder builder = new StringBuilder();
|
|
if (null != dict && dict.Count > 0)
|
|
if (null != dict && dict.Count > 0)
|
|
@@ -227,47 +240,78 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
{
|
|
{
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
{
|
|
{
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ string typeStr = SwitchType(dict[key], key);
|
|
|
|
+
|
|
if (index == 1)
|
|
if (index == 1)
|
|
{
|
|
{
|
|
- builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ //builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(typeStr);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ // builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(" " + TableOperators.And + " " + typeStr);
|
|
}
|
|
}
|
|
index++;
|
|
index++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exQuery.Where(builder.ToString());
|
|
exQuery.Where(builder.ToString());
|
|
- return await QueryObject<T>(exQuery ,TableName);
|
|
|
|
|
|
+ return await QueryObject<T>(exQuery, TableName);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- return null;
|
|
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- public async Task<T> FindOneByKey<T>(string key, string value) where T : TableEntity, new()
|
|
|
|
|
|
+ private static string SwitchType(object obj, string key)
|
|
|
|
+ {
|
|
|
|
+ Type s = obj.GetType();
|
|
|
|
+ TypeCode typeCode = Type.GetTypeCode(s);
|
|
|
|
+
|
|
|
|
+ switch (typeCode)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case TypeCode.String: return TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, obj.ToString());
|
|
|
|
+ case TypeCode.Int32: return TableQuery.GenerateFilterConditionForInt(key, QueryComparisons.Equal, (int)obj);
|
|
|
|
+ case TypeCode.Double: return TableQuery.GenerateFilterConditionForDouble(key, QueryComparisons.Equal, (double)obj);
|
|
|
|
+ case TypeCode.Byte: return TableQuery.GenerateFilterConditionForBinary(key, QueryComparisons.Equal, (byte[])obj);
|
|
|
|
+ case TypeCode.Boolean: return TableQuery.GenerateFilterConditionForBool(key, QueryComparisons.Equal, (bool)obj);
|
|
|
|
+ case TypeCode.DateTime: return TableQuery.GenerateFilterConditionForDate(key, QueryComparisons.Equal, (DateTimeOffset)obj);
|
|
|
|
+ case TypeCode.Int64: return TableQuery.GenerateFilterConditionForLong(key, QueryComparisons.Equal, (long)obj);
|
|
|
|
+
|
|
|
|
+ default: return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public async Task<T> FindOneByKey<T>(string key, object value) where T : TableEntity, new()
|
|
{
|
|
{
|
|
string TableName = await InitializeTable<T>();
|
|
string TableName = await InitializeTable<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
- if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
|
|
|
|
|
|
+ if (!string.IsNullOrEmpty(key) && null != value && !string.IsNullOrEmpty(value.ToString()))
|
|
{
|
|
{
|
|
- exQuery.Where(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal,
|
|
|
|
- value));
|
|
|
|
- return await QueryObject<T>(exQuery ,TableName );
|
|
|
|
|
|
+
|
|
|
|
+ string typeStr = SwitchType(value, key);
|
|
|
|
+ exQuery.Where(typeStr);
|
|
|
|
+ //exQuery.Where(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal,
|
|
|
|
+ // value));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return await QueryObject<T>(exQuery, TableName);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
public async Task<List<T>> GetEntities<T>(IDictionary<string, object> dict) where T : TableEntity, new()
|
|
public async Task<List<T>> GetEntities<T>(IDictionary<string, object> dict) where T : TableEntity, new()
|
|
{
|
|
{
|
|
- string TableName= await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
StringBuilder builder = new StringBuilder();
|
|
StringBuilder builder = new StringBuilder();
|
|
if (null != dict && dict.Count > 0)
|
|
if (null != dict && dict.Count > 0)
|
|
@@ -278,22 +322,29 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
{
|
|
{
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
{
|
|
{
|
|
|
|
+ string typeStr = SwitchType(dict, key);
|
|
|
|
+
|
|
if (index == 1)
|
|
if (index == 1)
|
|
{
|
|
{
|
|
- builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ //builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(typeStr);
|
|
|
|
+
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ // builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(" " + TableOperators.And + " " + typeStr);
|
|
|
|
+
|
|
}
|
|
}
|
|
index++;
|
|
index++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exQuery.Where(builder.ToString());
|
|
exQuery.Where(builder.ToString());
|
|
- return await QueryList<T>(exQuery, TableName);
|
|
|
|
|
|
+ return await QueryList<T>(exQuery, TableName);
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- return null;
|
|
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -316,7 +367,7 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
|
|
|
|
public async Task<List<T>> UpdateAll<T>(List<T> entitys) where T : TableEntity, new()
|
|
public async Task<List<T>> UpdateAll<T>(List<T> entitys) where T : TableEntity, new()
|
|
{
|
|
{
|
|
- string TableName = await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
IList<TableResult> result = null;
|
|
IList<TableResult> result = null;
|
|
Parallel.ForEach(Partitioner.Create(0, entitys.Count, 100),
|
|
Parallel.ForEach(Partitioner.Create(0, entitys.Count, 100),
|
|
async range =>
|
|
async range =>
|
|
@@ -329,7 +380,8 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
return entitys;
|
|
return entitys;
|
|
}
|
|
}
|
|
|
|
|
|
- public async Task<List<T>> SaveOrUpdateAll<T>(List<T> entitys) where T : TableEntity, new() {
|
|
|
|
|
|
+ public async Task<List<T>> SaveOrUpdateAll<T>(List<T> entitys) where T : TableEntity, new()
|
|
|
|
+ {
|
|
string TableName = await InitializeTable<T>();
|
|
string TableName = await InitializeTable<T>();
|
|
IList<TableResult> result = null;
|
|
IList<TableResult> result = null;
|
|
Parallel.ForEach(Partitioner.Create(0, entitys.Count, 100),
|
|
Parallel.ForEach(Partitioner.Create(0, entitys.Count, 100),
|
|
@@ -352,7 +404,7 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
TableBatchOperation batchOperation = new TableBatchOperation();
|
|
TableBatchOperation batchOperation = new TableBatchOperation();
|
|
for (Int32 i = range.Item1; i < range.Item2; i++)
|
|
for (Int32 i = range.Item1; i < range.Item2; i++)
|
|
batchOperation.Delete(entitys[i]);
|
|
batchOperation.Delete(entitys[i]);
|
|
-
|
|
|
|
|
|
+
|
|
result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
|
|
result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
|
|
});
|
|
});
|
|
return (List<T>)result;
|
|
return (List<T>)result;
|
|
@@ -360,14 +412,14 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
|
|
|
|
public async Task<T> Save<T>(TableEntity entity) where T : TableEntity, new()
|
|
public async Task<T> Save<T>(TableEntity entity) where T : TableEntity, new()
|
|
{
|
|
{
|
|
- string TableName= await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
TableOperation operation = TableOperation.Insert(entity);
|
|
TableOperation operation = TableOperation.Insert(entity);
|
|
TableResult result = await tableClient.GetTableReference(TableName).ExecuteAsync(operation);
|
|
TableResult result = await tableClient.GetTableReference(TableName).ExecuteAsync(operation);
|
|
return (T)result.Result;
|
|
return (T)result.Result;
|
|
}
|
|
}
|
|
public async Task<T> SaveOrUpdate<T>(TableEntity entity) where T : TableEntity, new()
|
|
public async Task<T> SaveOrUpdate<T>(TableEntity entity) where T : TableEntity, new()
|
|
{
|
|
{
|
|
- string TableName = await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
TableOperation operation = TableOperation.InsertOrReplace(entity);
|
|
TableOperation operation = TableOperation.InsertOrReplace(entity);
|
|
TableResult result = await tableClient.GetTableReference(TableName).ExecuteAsync(operation);
|
|
TableResult result = await tableClient.GetTableReference(TableName).ExecuteAsync(operation);
|
|
return (T)result.Result;
|
|
return (T)result.Result;
|
|
@@ -384,7 +436,7 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
public async Task<T> Delete<T>(TableEntity entity) where T : TableEntity, new()
|
|
public async Task<T> Delete<T>(TableEntity entity) where T : TableEntity, new()
|
|
{
|
|
{
|
|
|
|
|
|
- string TableName = await InitializeTable<T>();
|
|
|
|
|
|
+ string TableName = await InitializeTable<T>();
|
|
TableOperation operation = TableOperation.Delete(entity);
|
|
TableOperation operation = TableOperation.Delete(entity);
|
|
TableResult result = await tableClient.GetTableReference(TableName).ExecuteAsync(operation);
|
|
TableResult result = await tableClient.GetTableReference(TableName).ExecuteAsync(operation);
|
|
return (T)result.Result;
|
|
return (T)result.Result;
|
|
@@ -405,8 +457,9 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
//{
|
|
//{
|
|
// throw new NotImplementedException();
|
|
// throw new NotImplementedException();
|
|
//}
|
|
//}
|
|
-
|
|
|
|
- public async Task<AzurePagination<T>> FindListByDict<T>(Dictionary<string, object> dict, AzureTableToken azureTableToken) where T : TableEntity, new() {
|
|
|
|
|
|
+
|
|
|
|
+ public async Task<AzurePagination<T>> FindListByDict<T>(Dictionary<string, object> dict, AzureTableToken azureTableToken) where T : TableEntity, new()
|
|
|
|
+ {
|
|
string TableName = await InitializeTable<T>();
|
|
string TableName = await InitializeTable<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
var exQuery = new TableQuery<T>();
|
|
StringBuilder builder = new StringBuilder();
|
|
StringBuilder builder = new StringBuilder();
|
|
@@ -418,30 +471,35 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
|
|
{
|
|
{
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString()))
|
|
{
|
|
{
|
|
|
|
+ string typeStr = SwitchType(dict, key);
|
|
if (index == 1)
|
|
if (index == 1)
|
|
{
|
|
{
|
|
- builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ // builder.Append(TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
+ builder.Append(typeStr);
|
|
|
|
+
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
|
|
|
|
+ builder.Append(" " + TableOperators.And + " " + typeStr);
|
|
|
|
+ //builder.Append(" " + TableOperators.And + " " + TableQuery.GenerateFilterCondition(key, QueryComparisons.Equal, dict[key].ToString()));
|
|
}
|
|
}
|
|
index++;
|
|
index++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exQuery.Where(builder.ToString());
|
|
exQuery.Where(builder.ToString());
|
|
- return await QueryList<T>(azureTableToken, exQuery , TableName);
|
|
|
|
|
|
+ return await QueryList<T>(azureTableToken, exQuery, TableName);
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- return null;
|
|
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
- private async Task<AzurePagination<T>> QueryList<T>(AzureTableToken azureTableToken, TableQuery<T> exQuery,string TableName) where T : TableEntity, new()
|
|
|
|
|
|
+ private async Task<AzurePagination<T>> QueryList<T>(AzureTableToken azureTableToken, TableQuery<T> exQuery, string TableName) where T : TableEntity, new()
|
|
{
|
|
{
|
|
TableContinuationToken tableToken = new HaBookTableContinuationToken(azureTableToken).GetContinuationToken();
|
|
TableContinuationToken tableToken = new HaBookTableContinuationToken(azureTableToken).GetContinuationToken();
|
|
List<T> entitys = new List<T>();
|
|
List<T> entitys = new List<T>();
|
|
-
|
|
|
|
|
|
+
|
|
var result = await tableClient.GetTableReference(TableName).ExecuteQuerySegmentedAsync(exQuery, tableToken);
|
|
var result = await tableClient.GetTableReference(TableName).ExecuteQuerySegmentedAsync(exQuery, tableToken);
|
|
if (result.Results.Count > 0)
|
|
if (result.Results.Count > 0)
|
|
{
|
|
{
|