SqlSugar/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs

605 lines
29 KiB
C#
Raw Normal View History

2019-05-09 17:16:45 +08:00
using SqlSugar;
using System;
2019-05-06 12:41:48 +08:00
using System.Collections.Generic;
2019-05-20 11:02:41 +08:00
using System.Data;
using System.Dynamic;
2019-05-06 12:41:48 +08:00
using System.Linq;
using System.Text;
2019-05-09 17:16:45 +08:00
namespace OrmTest
2019-05-06 12:41:48 +08:00
{
2019-05-06 21:38:27 +08:00
public class Demo1_Queryable
2019-05-06 12:41:48 +08:00
{
2019-05-06 16:53:14 +08:00
public static void Init()
{
2019-05-20 17:00:19 +08:00
EasyExamples();
2019-05-09 18:02:37 +08:00
QueryConditions();
2019-05-09 17:55:11 +08:00
JoinTable();
2019-05-09 17:16:45 +08:00
Async();
2019-05-09 21:21:00 +08:00
NoEntity();
Mapper();
2019-05-14 13:11:07 +08:00
SqlFuncTest();
2019-05-14 17:01:49 +08:00
Subquery();
2019-05-20 11:02:41 +08:00
ReturnType();
2021-04-24 03:20:01 +08:00
ConfiQuery();
}
private static void ConfiQuery()
{
var db = GetInstance();
2021-09-01 00:41:05 +08:00
List<DataDictionary> datas = new List<DataDictionary>();
2021-04-25 20:37:18 +08:00
datas.Add(new DataDictionary() { Code="1", Name="男",Type="sex" });
datas.Add(new DataDictionary() { Code = "2", Name = "女", Type = "sex" });
datas.Add(new DataDictionary() { Code = "1", Name = "南通市", Type = "city" });
datas.Add(new DataDictionary() { Code = "2", Name = "苏州市", Type = "city" });
datas.Add(new DataDictionary() { Code = "1", Name = "江苏省", Type = "province" });
datas.Add(new DataDictionary() { Code = "2", Name = "湖南省", Type = "province" });
db.CodeFirst.InitTables<DataDictionary>();
db.CodeFirst.InitTables<Person>();
2021-05-15 22:34:52 +08:00
db.DbMaintenance.TruncateTable<DataDictionary>();
2021-04-25 20:37:18 +08:00
db.Insertable(datas).ExecuteCommand();
if (!db.ConfigQuery.Any())
{
var types= db.Queryable<DataDictionary>().Select(it => it.Type).Distinct().ToList();
foreach (var type in types)
{
db.ConfigQuery.SetTable<DataDictionary>(it => it.Code, it => it.Name, type, it => it.Type == type);
}
2021-04-25 20:47:32 +08:00
db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name, "01", it => it.Id > 1);
db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name, "02", it => it.Id > 2);
db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name, null);
2021-04-25 20:37:18 +08:00
}
var res=db.Queryable<Person>().Select(it => new Person()
{
Id=it.Id.SelectAll(),
SexName=it.SexId.GetConfigValue<DataDictionary>("sex"),
ProviceName = it.SexId.GetConfigValue<DataDictionary>("province"),
CityName = it.SexId.GetConfigValue<DataDictionary>("city"),
}).ToList();//也支持支持写在Where或者Orderby
2021-05-15 22:44:55 +08:00
2021-04-24 03:20:01 +08:00
var list = db.Queryable<OrderItem>().Select(it => new OrderItem
{
2021-04-24 12:36:39 +08:00
ItemId = it.ItemId.SelectAll(),
2021-04-24 03:20:01 +08:00
OrderName = it.OrderId.GetConfigValue<Order>("01")
}).ToList();
var list2 = db.Queryable<OrderItem>().Select(it => new OrderItem
{
2021-04-24 12:49:56 +08:00
ItemId = it.ItemId.SelectAll(),
2021-04-24 03:20:01 +08:00
OrderName = it.OrderId.GetConfigValue<Order>("02")
}).ToList();
var list3 = db.Queryable<OrderItem>().Select(it => new OrderItem
{
2021-04-24 12:49:56 +08:00
ItemId = it.ItemId.SelectAll(),
2021-04-24 03:20:01 +08:00
OrderName = it.OrderId.GetConfigValue<Order>()
}).ToList();
var list4 = db.Queryable<OrderItem>().Select(it => new OrderItem
{
2021-04-24 12:49:56 +08:00
ItemId = it.ItemId.SelectAll(),
2021-04-24 03:20:01 +08:00
OrderName = it.OrderId.GetConfigValue<Order>()
})
2021-04-24 12:49:56 +08:00
.Where(it=>it.OrderId.GetConfigValue<Order>()== "order1")
2021-04-24 03:20:01 +08:00
.OrderBy(it=>it.OrderId.GetConfigValue<Order>()).ToList();
2021-04-24 12:49:56 +08:00
var list5 = db.Queryable<Order, OrderItem>((o, i) => o.Id == i.OrderId)
.OrderBy((o,i)=>i.OrderId.GetConfigValue<Order>(),OrderByType.Desc)
.Select<ViewOrder>((o,i)=>new ViewOrder() {
Id= o.Id.SelectAll(),
2021-04-24 03:20:01 +08:00
Name=i.OrderId.GetConfigValue<Order>()
})
.ToList();
2019-05-20 11:02:41 +08:00
}
2019-05-20 17:00:19 +08:00
private static void EasyExamples()
{
Console.WriteLine("");
Console.WriteLine("#### Examples Start ####");
var db = GetInstance();
var dbTime = db.GetDate();
2020-10-29 17:15:23 +08:00
var getAll = db.Queryable<Order>().Where(it=> SqlFunc.EqualsNull(it.Name,null)).ToList();
2019-05-20 17:00:19 +08:00
var getOrderBy = db.Queryable<Order>().OrderBy(it => it.Name,OrderByType.Desc).ToList();
var getOrderBy2 = db.Queryable<Order>().OrderBy(it => it.Id).OrderBy(it => it.Name, OrderByType.Desc).ToList();
var getOrderBy3 = db.Queryable<Order>().OrderBy(it =>new { it.Name,it.Id}).ToList();
var getRandom = db.Queryable<Order>().OrderBy(it => SqlFunc.GetRandom()).First();
var getByPrimaryKey = db.Queryable<Order>().InSingle(2);
var getSingleOrDefault = db.Queryable<Order>().Where(it => it.Id == 1).Single();
var getFirstOrDefault = db.Queryable<Order>().First();
var getByWhere = db.Queryable<Order>().Where(it => it.Id == 1 || it.Name == "a").ToList();
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();
2019-05-25 07:35:37 +08:00
var getByFuns2 = db.Queryable<Order>().GroupBy(it => it.Name).Select(it => SqlFunc.AggregateDistinctCount(it.Price)).ToList();
2020-12-01 21:16:32 +08:00
var getDicionary = db.Queryable<Order>().ToDictionary(it => it.Id, it => it.Name);
var getDicionaryList = db.Queryable<Order>().ToDictionaryList();
2020-12-04 19:52:19 +08:00
var getTest = db.Queryable<Order>().Where(it =>string.IsNullOrWhiteSpace( it.Name)).ToList();
2021-03-24 12:39:11 +08:00
var test01 = db.Queryable<Order>().PartitionBy(it => it.Id).ToList();
var q1 = db.Queryable<Order>().Take(1);
var q2 = db.Queryable<Order>().Take(2);
var test02 = db.Union(q1, q2).ToList();
var test03 = db.Queryable<Order>().Take(1).ToList();
2021-04-11 10:44:49 +08:00
var dp = DateTime.Now;
var test05 = db.Queryable<Order>().Where(it => it.CreateTime.Month== dp.Month).ToList();
2021-04-24 21:03:48 +08:00
var test06 = db.Queryable<Order>()
.ToPivotTable(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));
var test07 = db.Queryable<Order>()
.ToPivotList(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));
var test08 = db.Queryable<Order>()
.ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));
2021-04-24 22:16:26 +08:00
var test09 = db.Queryable<Order>().PartitionBy(it=>it.Id).ToPageListAsync(1,2,0);
test09.Wait();
2021-05-15 23:22:03 +08:00
int c = 0;
var test10 = db.Queryable<Order>().ToPageList(1, 2, ref c);
2021-07-19 17:01:07 +08:00
var test11 = db.Queryable<Order>().GroupBy(it=>new { it.CreateTime.Year }).Select(it=>it.CreateTime.Year).ToList();
var test12 = db.Queryable<Order>().GroupBy(it => it.CreateTime.Date ).Select(it => it.CreateTime.Date).ToList();
2021-07-19 17:28:43 +08:00
var test13 = db.Queryable<Order>().GroupBy(it => new { it.CreateTime.Date ,it.CreateTime.Year,it.CreateTime.Minute })
.Select(it => new { it.CreateTime.Date, it.CreateTime.Year, it.CreateTime.Minute }).ToList();
var test14 = db.Queryable<Order>()
.GroupBy(it => it.CreateTime.Year )
.GroupBy(it => it.CreateTime.Second)
.GroupBy(it => it.CreateTime.Date)
.Select(it => new {
it.CreateTime.Year,
it.CreateTime.Second,
it.CreateTime.Date
}).ToList();
2021-07-21 12:34:45 +08:00
var test15 = db.Queryable<Order, Order>((o, i) => new JoinQueryInfos(
JoinType.Left, o.Name == SqlFunc.ToString(SqlFunc.MergeString(",", i.Name, ","))
))
.Select<ViewOrder>().ToList();
2021-09-10 15:30:48 +08:00
var test16 = db.Queryable<Order>().Select(it => SqlFunc.SqlServer_DateDiff("day", DateTime.Now.AddDays(-1), DateTime.Now)).ToList();
2021-10-05 17:28:58 +08:00
var test17 =
db.Queryable<Order>()
.Select<Order>()
.MergeTable()
2021-10-05 17:43:39 +08:00
.Select(it => new ViewOrder()
2021-10-05 17:28:58 +08:00
{
2021-10-05 17:43:39 +08:00
Name = SqlFunc.Subqueryable<Order>().Select(s => s.Name)
2021-10-05 17:28:58 +08:00
}).ToList(); ;
var test18 = db.UnionAll(
db.Queryable<Order>() ,
db.Queryable<Order>()
)
.Select(it=>new ViewOrder(){
2021-10-05 17:43:39 +08:00
Name=SqlFunc.Subqueryable<Order>().Select(s=>s.Name)
2021-10-05 17:28:58 +08:00
}).ToList();
2021-10-31 08:42:40 +08:00
var test19 = db.Queryable<Order>().Select<ViewOrder>().ToList();
2021-11-03 01:17:29 +08:00
var test20 = db.Queryable<Order>().LeftJoin<Custom>((o, cs) =>o.Id==cs.Id)
.ToDictionary(it => it.Id, it => it.Name);
2021-12-22 13:13:51 +08:00
var test21 = db.Queryable<Order>().Where(it=>it.Id.ToString()==1.ToString()).Select(it => it.CreateTime.ToString("24")).First();
2022-03-01 08:57:45 +08:00
var test22 = db.Queryable<Order>().Where(it => it.Id.ToString() == 1.ToString()).Select(it => SqlFunc.AggregateDistinctCount(it.CreateTime)).First();
2022-03-04 14:39:34 +08:00
var test23 = db.Queryable<Order>().Where(it =>true).Select(it => new { x1 = it.CreateTime.ToString("yyyy-MM") ,it.CreateTime}).ToList();
2022-03-12 20:06:18 +08:00
var test24 = db.Queryable<Order>().Where(it => true).Select(it => new { x1 = it.CreateTime.ToString("yyyy-MM-dd _ HH _ mm _ ss "), it.CreateTime }).ToList();
2022-03-12 20:21:50 +08:00
var test25 = db.Queryable<Order>().Where(it => true).Select(it => new { x1 = it.CreateTime.Month,x2=DateTime.Now.Month}).ToList();
var test26 = db.Queryable<Order>().Where(it => true).Select(it => new { x1 = it.CreateTime.Day, x2 = DateTime.Now.Day }).ToList();
2022-03-12 20:28:02 +08:00
var test27 = db.Queryable<Order>().Where(it => true).Select(it => new { x1 = it.CreateTime.Year, x2 = DateTime.Now.Year }).ToList();
2022-03-22 20:09:21 +08:00
var test28 = db.Queryable<Order>().Select(it=>SqlFunc.DateDiff(DateType.Day,Convert.ToDateTime("2021-1-1"),Convert.ToDateTime("2021-1-12"))).ToList();
var test29 = db.Queryable<Order>().Select(it =>new {x= SqlFunc.LessThan(1, 2) }).ToList();
var test30= db.Queryable<Order>().Select(it => new { x = SqlFunc.LessThanOrEqual(1, 2) }).ToList();
var test31 = db.Queryable<Order>().Select(it => new { x = SqlFunc.GreaterThan(1, 2) }).ToList();
var test32 = db.Queryable<Order>().Select(it => new { x = SqlFunc.GreaterThanOrEqual(1, 2) }).ToList();
2022-03-27 21:11:14 +08:00
List<Order> result = new List<Order>();
db.Queryable<Order>().ForEach(it =>
{
result.Add(it);
},10);
2022-03-27 21:40:13 +08:00
result = new List<Order>();
int count = 0;
db.Queryable<Order>().ForEachByPage(it =>
{
result.Add(it);
},2,10,ref count,5);
2022-03-27 21:11:14 +08:00
var test33= db.Queryable<Order>().ToList();
2022-03-27 22:23:10 +08:00
db.CurrentConnectionConfig.SqlMiddle = new SqlMiddle
{
IsSqlMiddle=true,
ExecuteCommand = (s, p)=>{ return s.Length; }
};
var five=db.Ado.ExecuteCommand("11111");
db.CurrentConnectionConfig.SqlMiddle = null;
2019-05-20 17:00:19 +08:00
Console.WriteLine("#### Examples End ####");
}
2019-05-20 11:02:41 +08:00
private static void ReturnType()
{
Console.WriteLine("");
Console.WriteLine("#### ReturnType Start ####");
var db = GetInstance();
List<Order> list = db.Queryable<Order>().ToList();
2020-11-22 13:24:53 +08:00
var x2=db.Ado.SqlQueryAsync<Order>("select * from [Order] ");
x2.Wait();
var x22 = db.Ado.GetScalarAsync("select * from [Order] ");
x22.Wait();
var x222 = db.Ado.ExecuteCommandAsync("select * from [Order] ");
x222.Wait();
2019-05-20 11:02:41 +08:00
Order item = db.Queryable<Order>().First(it => it.Id == 1);
DataTable dataTable = db.Queryable<Order>().Select(it => it.Id).ToDataTable();
var json = db.Queryable<Order>().ToJson();
List<int> listInt = db.Queryable<Order>().Select(it => it.Id).ToList();
var dynamic = db.Queryable<Order>().Select<dynamic>().ToList();
var viewModel = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId ,
JoinType.Left, o.CustomId == c.Id
))
.Select<ViewOrder>().ToList();
var newDynamic = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => new { orderName = o.Name, cusName=c.Name }).ToList();
var newClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => new ViewOrder { Name=o.Name, CustomName=c.Name }).ToList();
var oneClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => c).ToList();
var twoClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => new { o,i}).ToList();
List<Dictionary<string, object>> ListDic = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select<ExpandoObject>().ToList().Select(it => it.ToDictionary(x => x.Key, x => x.Value)).ToList();
Console.WriteLine("#### ReturnType End ####");
2019-05-14 17:01:49 +08:00
}
private static void Subquery()
{
Console.WriteLine("");
Console.WriteLine("#### Subquery Start ####");
var db = GetInstance();
var list = db.Queryable<Order>().Take(10).Select(it => new
{
customName=SqlFunc.Subqueryable<Custom>().Where("it.CustomId=id").Select(s=>s.Name),
customName2 = SqlFunc.Subqueryable<Custom>().Where("it.CustomId = id").Where(s => true).Select(s => s.Name)
}).ToList();
2021-03-11 13:14:14 +08:00
var list1 = db.Queryable<Order>().Select(it => new
{
id = SqlFunc.Subqueryable<Custom>().Where(s => s.Id == 1).Sum(s => s.Id) * 1
}).ToList();
2020-12-29 13:06:45 +08:00
var list2 = db.Queryable<Order>().Where(it =>
SqlFunc.Subqueryable<OrderItem>()
2021-12-24 22:53:44 +08:00
.LeftJoin<OrderItem>((i,z)=>i.ItemId==z.ItemId)
2021-12-24 23:03:13 +08:00
.InnerJoin<OrderItem>((i,z,y) => i.ItemId == z.ItemId)
.InnerJoin<OrderItem>((i,z,y,h) => i.ItemId == z.ItemId)
.InnerJoin<OrderItem>((i, z, y, h, n) => i.ItemId == z.ItemId)
2021-12-24 22:53:44 +08:00
.Where((i, z) => i.ItemId == z.ItemId)
.Any()
2020-12-29 13:06:45 +08:00
).ToList();
2021-12-24 23:03:13 +08:00
2021-09-10 15:30:48 +08:00
var list3 = db.Queryable<Order>().Select(it => new
{
customName = SqlFunc.Subqueryable<Custom>().Where(s=>s.Id==it.CustomId).GroupBy(s=>s.Name).Having(s=>SqlFunc.AggregateCount(s.Id)>0).Select(s => s.Name)
}).ToList();
2021-02-04 17:30:11 +08:00
2021-09-10 17:59:47 +08:00
var exp = Expressionable.Create<Custom>().And(s => s.Id==1).ToExpression();
var list4 = db.Queryable<Order>().Select(it => new
{
2021-09-10 18:32:31 +08:00
customName = SqlFunc.Subqueryable<Custom>().Where(exp).Where(exp).GroupBy(s => s.Name).Having(s => SqlFunc.AggregateCount(s.Id) > 0).Select(s => s.Name)
2021-09-10 17:59:47 +08:00
}).ToList();
2021-12-24 21:33:08 +08:00
var list5 = db.Queryable<Order>().Where(it =>
SqlFunc.Subqueryable<OrderItem>()
.LeftJoin<OrderItem>((i, y) => i.ItemId == y.ItemId)
.InnerJoin<OrderItem>((i, z) => i.ItemId == z.ItemId)
.Where(i => i.ItemId == 1)
.Any()
).ToList();
2019-05-14 17:01:49 +08:00
Console.WriteLine("#### Subquery End ####");
2019-05-14 13:11:07 +08:00
}
private static void SqlFuncTest()
{
Console.WriteLine("");
Console.WriteLine("#### SqlFunc Start ####");
var db = GetInstance();
var index= db.Queryable<Order>().Select(it => SqlFunc.CharIndex("a", "cccacc")).First();
2020-11-13 12:36:58 +08:00
var list = db.Queryable<Order>().Select(it =>new ViewOrder()
{
Id = SqlFunc.AggregateSum(SqlFunc.IF(it.Id > 0).Return(1).End(0))
}).ToList();
2020-11-22 23:03:27 +08:00
var list2 = db.Queryable<Order>().Where(it=>it.CreateTime.Date==it.CreateTime).Select(it => new
2020-11-22 14:31:22 +08:00
{
2020-11-22 23:03:27 +08:00
date = it.CreateTime.Date,
datetime = DateTime.Now.Date
2020-11-22 14:31:22 +08:00
}).ToList();
2019-05-14 17:01:49 +08:00
Console.WriteLine("#### SqlFunc End ####");
}
private static void Mapper()
{
Console.WriteLine("");
Console.WriteLine("#### Mapper Start ####");
var db = GetInstance();
//Creater Table
db.CodeFirst.InitTables(typeof(Tree));
db.DbMaintenance.TruncateTable("tree");
db.Insertable(new Tree() { Id = 1, Name = "root" }).ExecuteCommand();
db.Insertable(new Tree() { Id = 11, Name = "child1",ParentId=1 }).ExecuteCommand();
db.Insertable(new Tree() { Id = 12, Name = "child2",ParentId=1 }).ExecuteCommand();
db.Insertable(new Tree() { Id = 2, Name = "root" }).ExecuteCommand();
db.Insertable(new Tree() { Id = 22, Name = "child3", ParentId = 2 }).ExecuteCommand();
2019-06-02 15:18:32 +08:00
// Same property name mapping,Both entities have parentId
var list = db.Queryable<Tree>().Mapper(it => it.Parent, it => it.ParentId).ToList();
//If both entities have parentId, I don't want to associate with parentId.
var list1 =db.Queryable<Tree>()
2019-05-10 20:26:23 +08:00
//parent=(select * from parent where id=it.parentid)
.Mapper(it=>it.Parent,it=>it.ParentId, it=>it.Parent.Id)
//Child=(select * from parent where ParentId=it.id)
.Mapper(it => it.Child, it => it.Id, it => it.Parent.ParentId)
.ToList();
2020-11-12 23:26:21 +08:00
db.Insertable(new Tree() { Id = 222, Name = "child11", ParentId = 11 }).ExecuteCommand();
2021-07-22 15:52:50 +08:00
var tree = db.Queryable<Tree>().ToTree(it => it.Child, it => it.ParentId, 0);
var allchilds= db.Queryable<Tree>().ToChildList(it => it.ParentId, 0);
var allchilds1 = db.Queryable<Tree>().ToChildList(it => it.ParentId, 1);
var allchilds2= db.Queryable<Tree>().ToChildList(it => it.ParentId, 2);
2021-02-20 12:22:05 +08:00
var parentList = db.Queryable<Tree>().ToParentList(it => it.ParentId, 22);
var parentList2 = db.Queryable<Tree>().ToParentList(it => it.ParentId, 222);
var parentList3 = db.Queryable<Tree>().ToParentList(it => it.ParentId, 2);
2019-06-02 10:42:18 +08:00
//one to one
var list2 = db.Queryable<OrderItemInfo>().Mapper(it => it.Order, it => it.OrderId).ToList();
2019-06-02 11:09:03 +08:00
//one to many
var list3 = db.Queryable<Order>().Mapper(it => it.Items, it => it.Items.First().OrderId).ToList();
2019-06-02 15:18:32 +08:00
//many to many
db.CodeFirst.InitTables<A, B, ABMapping>();
db.Insertable(new A() { Name = "A" }).ExecuteCommand();
db.Insertable(new B() { Name = "B" }).ExecuteCommand();
db.Insertable(new ABMapping() { AId = 1, BId = 1 }).ExecuteCommand();
var list4 = db.Queryable<ABMapping>()
.Mapper(it => it.A, it => it.AId)
.Mapper(it => it.B, it => it.BId).ToList();
//Manual mode
var result = db.Queryable<OrderInfo>().Take(10).Select<ViewOrder>().Mapper((itemModel, cache) =>
{
var allItems = cache.Get(orderList => {
var allIds = orderList.Select(it => it.Id).ToList();
return db.Queryable<OrderItem>().Where(it => allIds.Contains(it.OrderId)).ToList();//Execute only once
});
itemModel.Items = allItems.Where(it => it.OrderId==itemModel.Id).ToList();//Every time it's executed
}).ToList();
Console.WriteLine("#### End Start ####");
2019-05-09 21:21:00 +08:00
}
private static void NoEntity()
{
Console.WriteLine("");
Console.WriteLine("#### No Entity Start ####");
var db = GetInstance();
var list = db.Queryable<dynamic>().AS("order ").Where("id=id", new { id = 1 }).ToList();
var list2 = db.Queryable<dynamic>("o").AS("order").AddJoinInfo("OrderDetail", "i", "o.id=i.OrderId").Where("id=id", new { id = 1 }).Select("o.*").ToList();
Console.WriteLine("#### No Entity End ####");
2019-05-09 17:16:45 +08:00
}
2019-05-09 17:55:11 +08:00
private static void JoinTable()
{
Console.WriteLine("");
Console.WriteLine("#### Join Table Start ####");
var db = GetInstance();
//Simple join
var list = db.Queryable<Order, OrderItem, Custom>((o, i, c) => o.Id == i.OrderId&&c.Id == o.CustomId)
.Select<ViewOrder>()
.ToList();
//Join table
var list2 = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, c.Id == o.CustomId
))
.Select<ViewOrder>().ToList();
//Join queryable
2019-05-14 15:45:57 +08:00
var query1 = db.Queryable<Order, OrderItem>((o, i) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId
))
2019-05-09 17:55:11 +08:00
.Where(o => o.Name == "jack");
var query2 = db.Queryable<Custom>();
var list3=db.Queryable(query1, query2,JoinType.Left, (p1, p2) => p1.CustomId == p2.Id).Select<ViewOrder>().ToList();
2020-10-19 17:37:24 +08:00
var query3 = db.Union(
db.Queryable<Order>().Where(it => it.Name.Contains("a")),
db.Queryable<Order>().Where(it => it.Name.Contains("b"))
).ToList();
2020-12-05 17:14:04 +08:00
var query4 = db.Queryable<Order,OrderItem,Custom>(
db.Queryable<Order>().Where(it => it.Name.Contains("a")),
db.Queryable<OrderItem>().Where(it => it.CreateTime>DateTime.Now),
db.Queryable<Custom>().Where(it => it.Name.Contains("b")),
JoinType.Left, (o, i, c) => o.Id==i.OrderId,
JoinType.Left,(o,i,c)=>o.CustomId==c.Id
).Select(o=>o).ToList();
2021-10-01 21:41:03 +08:00
var query5 = db.Queryable<Order>()
.InnerJoin<Custom>((o, cus) => o.CustomId == cus.Id)
.InnerJoin<OrderItem>((o, cus, oritem) => o.Id == oritem.OrderId)
.Where((o) => o.Id == 1)
.Select((o, cus) => new ViewOrder { Id=o.Id, CustomName = cus.Name })
.ToList();
2021-10-22 21:07:30 +08:00
var query6 = db.Queryable(db.Queryable<Order>()).LeftJoin<OrderItem>((m, i) => m.Id == i.OrderId)
.ToList();
var query7 = db.Queryable(db.Queryable<Order>().Select<Order>().MergeTable()).LeftJoin<OrderItem>((m, i) => m.Id == i.OrderId)
.ToList();
2021-10-01 21:41:03 +08:00
2021-10-31 15:30:09 +08:00
var query8 = db.Queryable<Order>()
.LeftJoin(db.Queryable<Custom>().Where(it=>it.Id==1),(o,i)=>o.CustomId==i.Id)
2021-10-31 15:40:28 +08:00
.LeftJoin(db.Queryable<OrderItem>().Where(it=>it.OrderId==2),(o,i,item)=>item.OrderId==o.Id)
2021-10-31 16:22:50 +08:00
.LeftJoin(db.Queryable<Order>().Where(it => it.Id >0), (o, i, item, od) => od.Id == o.Id)
2021-10-31 15:30:09 +08:00
.Select(o => o).ToList();
2021-10-31 16:22:50 +08:00
2019-05-09 17:55:11 +08:00
Console.WriteLine("#### Join Table End ####");
}
2019-05-09 18:02:37 +08:00
private static void QueryConditions()
2019-05-09 17:26:07 +08:00
{
Console.WriteLine("");
2019-05-09 18:02:37 +08:00
Console.WriteLine("#### Query Conditions Start ####");
2019-05-09 17:26:07 +08:00
SqlSugarClient db = GetInstance();
2019-05-09 17:31:07 +08:00
/*** By expression***/
2019-05-09 17:26:07 +08:00
//id=@id
var list = db.Queryable<Order>().Where(it => it.Id == 1).ToList();
//id=@id or name like '%'+@name+'%'
var list2 = db.Queryable<Order>().Where(it => it.Id == 1 || it.Name.Contains("jack")).ToList();
//Create expression
var exp = Expressionable.Create<Order>()
.And(it => it.Id == 1)
.Or(it => it.Name.Contains("jack")).ToExpression();
var list3 = db.Queryable<Order>().Where(exp).ToList();
2019-05-09 17:31:07 +08:00
/*** By sql***/
//id=@id
var list4 = db.Queryable<Order>().Where("id=@id", new { id = 1 }).ToList();
//id=@id or name like '%'+@name+'%'
2019-05-09 17:55:11 +08:00
var list5 = db.Queryable<Order>().Where("id=@id or name like '%'+@name+'%' ", new { id = 1, name = "jack" }).ToList();
2019-05-09 17:31:07 +08:00
/*** By dynamic***/
2019-05-09 17:34:24 +08:00
2019-05-09 17:31:07 +08:00
//id=1
var conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1
var student = db.Queryable<Order>().Where(conModels).ToList();
//Complex use case
List<IConditionalModel> Order = new List<IConditionalModel>();
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Like, FieldValue = "1" });// id like '%1%'
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNullOrEmpty });
2022-03-13 11:12:09 +08:00
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.In, FieldValue = "1,2,3",CSharpTypeName="int" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NotIn, FieldValue = "1,2,3" ,CSharpTypeName="int" });
2019-05-09 17:31:07 +08:00
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1,2,3" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNot, FieldValue = null });// id is not null
conModels.Add(new ConditionalCollections()
{
ConditionalList = new List<KeyValuePair<WhereType, SqlSugar.ConditionalModel>>()// (id=1 or id=2 and id=1)
{
2019-05-09 17:34:24 +08:00
//new KeyValuePair<WhereType, ConditionalModel>( WhereType.And ,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" }),
2019-05-09 17:31:07 +08:00
new KeyValuePair<WhereType, ConditionalModel> (WhereType.Or,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }),
new KeyValuePair<WhereType, ConditionalModel> ( WhereType.And,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" })
}
});
var list6 = db.Queryable<Order>().Where(conModels).ToList();
2019-05-09 17:34:24 +08:00
/*** Conditional builder ***/
// use whereif
string name = "";
2019-05-09 17:55:11 +08:00
int id = 1;
2019-05-09 17:34:24 +08:00
var query = db.Queryable<Order>()
.WhereIF(!string.IsNullOrEmpty(name), it => it.Name.Contains(name))
.WhereIF(id > 0, it => it.Id == id).ToList();
//clone new Queryable
var query2 = db.Queryable<Order>().Where(it => it.Id == 1);
var list7 = query2.Clone().Where(it => it.Name == "jack").ToList();//id=1 and name = jack
var list8 = query2.Clone().Where(it => it.Name == "tom").ToList();//id=1 and name = tom
2019-05-09 17:26:07 +08:00
Console.WriteLine("#### Condition Screening End ####");
2019-05-09 17:34:24 +08:00
2019-05-09 17:26:07 +08:00
}
2019-05-09 17:16:45 +08:00
private static void Async()
{
Console.WriteLine("");
Console.WriteLine("#### Async Start ####");
2019-05-09 17:26:07 +08:00
SqlSugarClient db = GetInstance();
var task1 = db.Queryable<Order>().FirstAsync();
2019-05-19 09:14:04 +08:00
task1.Wait();
2019-05-09 17:26:07 +08:00
var task2 = db.Queryable<Order>().Where(it => it.Id == 1).ToListAsync();
2019-05-19 09:14:04 +08:00
2019-05-09 17:26:07 +08:00
task2.Wait();
Console.WriteLine("#### Async End ####");
}
private static SqlSugarClient GetInstance()
{
return new SqlSugarClient(new ConnectionConfig()
2019-05-09 17:16:45 +08:00
{
2019-05-20 11:02:41 +08:00
DbType = SqlSugar.DbType.SqlServer,
2019-05-09 17:16:45 +08:00
ConnectionString = Config.ConnectionString,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true,
AopEvents = new AopEvents
{
OnLogExecuting = (sql, p) =>
{
Console.WriteLine(sql);
2019-05-09 17:26:07 +08:00
Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
2019-05-09 17:16:45 +08:00
}
}
});
2019-05-06 16:53:14 +08:00
}
2019-05-06 12:41:48 +08:00
}
}