Add Queryable.ToDictionary

This commit is contained in:
skx
2020-12-01 21:16:32 +08:00
parent 59f73516c8
commit 0183f7c30a
3 changed files with 40 additions and 0 deletions

View File

@@ -42,6 +42,8 @@ namespace OrmTest
var getByWhere2 = db.Queryable<Order>().Where(it => it.Id == DateTime.Now.Year).ToList();
var getByFuns = db.Queryable<Order>().Where(it => SqlFunc.IsNullOrEmpty(it.Name)).ToList();
var getByFuns2 = db.Queryable<Order>().GroupBy(it => it.Name).Select(it => SqlFunc.AggregateDistinctCount(it.Price)).ToList();
var getDicionary = db.Queryable<Order>().ToDictionary(it => it.Id, it => it.Name);
var getDicionaryList = db.Queryable<Order>().ToDictionaryList();
Console.WriteLine("#### Examples End ####");
}

View File

@@ -783,6 +783,38 @@ namespace SqlSugar
return result;
}
public Dictionary<string, object> ToDictionary(Expression<Func<T, object>> key, Expression<Func<T, object>> value)
{
var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString();
var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString();
var result = this.Select<KeyValuePair<string, object>>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value);
return result;
}
public async Task<Dictionary<string, object>> ToDictionaryAsync(Expression<Func<T, object>> key, Expression<Func<T, object>> value)
{
var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle);
var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle);
var list = await this.Select<KeyValuePair<string, object>>(keyName + "," + valueName).ToListAsync();
var result =list.ToDictionary(it => it.Key.ObjToString(), it => it.Value);
return result;
}
public List<Dictionary<string, object>> ToDictionaryList()
{
var list = this.ToList();
if (list == null)
return null;
else
return this.Context.Utilities.DeserializeObject<List<Dictionary<string, object>>>(this.Context.Utilities.SerializeObject(list));
}
public async Task<List<Dictionary<string, object>>> ToDictionaryListAsync()
{
var list =await this.ToListAsync();
if (list == null)
return null;
else
return this.Context.Utilities.DeserializeObject<List<Dictionary<string, object>>>(this.Context.Utilities.SerializeObject(list));
}
public virtual List<T> ToList()
{
InitMapping();

View File

@@ -122,6 +122,12 @@ namespace SqlSugar
Task<TResult> AvgAsync<TResult>(Expression<Func<T, TResult>> expression);
List<T> ToList();
Dictionary<string, object> ToDictionary(Expression<Func<T, object>> key, Expression<Func<T, object>> value);
Task<Dictionary<string, object>> ToDictionaryAsync(Expression<Func<T, object>> key, Expression<Func<T, object>> value);
List<Dictionary<string, object>> ToDictionaryList();
Task<List<Dictionary<string, object>>> ToDictionaryListAsync();
T[] ToArray();
Task<List<T>> ToListAsync();