int? status = 0;
string remark = "测试";
DateTime? startTime = null;
DateTime? endTime = DateTime.Now;
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s);
ISqlString sql = session.CreateSql(@"
select t.*, u.real_name as OrderUserRealName
from bs_order t
left join sys_user u on t.order_userid=u.id
where 1=1")
.Append(" and t.status=@status", status);
.AppendIf(!string.IsNullOrWhiteSpace(remark), " and t.remark like @remark", "%" + remark + "%");
.AppendIf(startTime.HasValue, " and t.order_time >= @startTime ", startTime);
.AppendIf(endTime.HasValue, " and t.order_time <= @endTime", endTime);
.Append(" order by t.order_time desc, t.id asc ");
long total = sql.QueryCount();
List<BsOrder> list = sql.QueryPage<BsOrder>(null, pageModel.PageSize, pageModel.CurrentPage);
DateTime? startTime = null;
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s); //打印SQL
List<SysUser> list = session.Queryable<SysUser>() //Lambda写法
//拼SQL写法
.Append<SysUser>(@" where t.create_userid = @CreateUserId
and t.password like @Password
and t.id in @Ids",
new
{
CreateUserId = "1",
Password = "%345%",
Ids = session.ForList(new List<int> { 1, 2, 9, 10, 11 })
})
.Where(t => !t.UserName.Contains("管理员")) //Lambda写法
.Append<SysUser>(@" and t.create_time >= @StartTime", new { StartTime = new DateTime(2020, 1, 1) }) //拼SQL写法
.Where<SysUser>(t => t.Id <= 20) //Lambda写法
.AppendIf(startTime.HasValue, " and t.create_time >= @StartTime ", new { StartTime = startTime }) //拼SQL写法
.Append(" and t.create_time <= @EndTime ", new { EndTime = new DateTime(2022, 8, 1) }) //拼SQL写法
.QueryList<SysUser>(); //如果上一句是拼SQL写法,就用QueryList
//.ToList(); //如果上一句是Lambda写法,就用ToList
long id = session.Queryable<SysUser>().Where(t => t.Id == 1).First().Id;
Assert.IsTrue(id == 1);
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
}
Assert.IsTrue(list.Count > 0);
DateTime? startTime = null;
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s); //打印SQL
List<SysUser> list = session.CreateSql(@"
select * from sys_user t where t.id <= @Id", new { Id = 20 })
.Append(@" and t.create_userid = @CreateUserId
and t.password like @Password
and t.id in @Ids",
new
{
CreateUserId = "1",
Password = "%345%",
Ids = session.ForList(new List<int> { 1, 2, 9, 10, 11 })
})
.AppendIf(startTime.HasValue, " and t.create_time >= @StartTime ", new { StartTime = startTime })
.Append(" and t.create_time <= @EndTime ", new { EndTime = new DateTime(2022, 8, 1) })
.QueryList<SysUser>();
long id = session.CreateSql("select id from sys_user where id=@Id", new { Id = 1 })
.QuerySingle<long>();
Assert.IsTrue(id == 1);
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
}
Assert.IsTrue(list.Count > 0);
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s); //打印SQL
List<SysUser> list = session.Queryable<SysUser>(
t => new
{
t.RealName,
t.CreateUserid
})
.Select("count(id) as Count")
.Where(t => t.Id >= 0)
.GroupBy<SysUser>("t.real_name, t.create_userid")
.Having<SysUser>("real_name like @Name1 or real_name like @Name2", new
{
Name1 = "%管理员%",
Name2 = "%测试%"
})
.ToList();
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
}
Assert.IsTrue(list.Count > 0);
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s); //打印SQL
List<SysUser> list = session.CreateSql<SysUser>() //说明:CreateSql不传参数则创建一个空SQL
.Select(t => new
{
t.RealName,
t.CreateUserid
})
.Select(session.CreateSql(@"(
select count(1)
from bs_order o
where o.order_userid = t.id
and o.status = @Status
) as OrderCount", new { Status = 0 }))
.Where(t => t.Id >= 0)
.ToList();
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
}
Assert.IsTrue(list.Count > 0);
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s); //打印SQL
var subSql = session.Queryable<BsOrder>(o => "count(1)")
.WhereJoin<SysUser>((o, t) => o.OrderUserid == t.Id)
.Where<BsOrder>(o => o.Status == 0);
List<SysUser> list = session.Queryable<SysUser>(
t => new
{
t.RealName,
t.CreateUserid
})
.Select("({0}) as OrderCount", subSql)
.Where(t => t.Id >= 0)
.ToList();
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
}
Assert.IsTrue(list.Count > 0);
var session = LiteSqlFactory.GetSession();
session.OnExecuting = (s, p) => Console.WriteLine(s); //打印SQL
var subSql = session.Queryable<SysUser>(t => new { t.Id }).Where(t => !t.RealName.Contains("管理员"));
var subSql2 = session.Queryable<SysUser>(t => new { t.Id }).Where(t => t.Id <= 20);
var sql = session.Queryable<SysUser>()
.Where(t => t.Password.Contains("345"))
.Append(" and id in ", subSql)
.Append<SysUser>(@" and t.create_time >= @StartTime", new { StartTime = new DateTime(2020, 1, 1) })
.Append<SysUser>(" and id in ", subSql2)
.Where(t => t.Password.Contains("234"));
var sql2 = session.Queryable<SysUser>().Where(t => t.RealName.Contains("管理员"));
sql.Append(" union all ", sql2);
List<SysUser> list = sql.QueryList<SysUser>();
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
}
Assert.IsTrue(list.Count > 0);
Assert.IsTrue(list.Count(t => t.RealName.Contains("管理员")) > 0);
Assert.IsTrue(list.Count(t => t.Id > 20) == 0);
var session = LiteSqlFactory.GetSession();
session.SetTypeMap<SysUser>(); //设置数据库字段名与实体类属性名映射
using (var conn = session.GetConnection()) //此处从连接池获取连接,用完一定要释放,也可以不使用连接池,直接new MySqlConnection
{
DynamicParameters dynamicParameters = new DynamicParameters();
dynamicParameters.Add("id", 20);
List<SysUser> list = conn.Conn.Query<SysUser>(@"
select *
from sys_user
where id < @id", dynamicParameters).ToList();
foreach (SysUser item in list)
{
Console.WriteLine(ModelToStringUtil.ToString(item));
Assert.IsTrue(!string.IsNullOrWhiteSpace(item.UserName));
}
}
久而久之,我也不想写SQL了,尽量不写SQL
var query = _session.Queryable<KpTaskRun>()
.Select<KpTask>(u => u.TaskName, t => t.TaskName) //取KpTask表的TaskName字段赋值给KpTaskRun实体类的扩展字段TaskName
.LeftJoin<KpTask>((t, u) => t.TaskId == u.Id); //关联KpTask表
if (_date != null)
{
query = query.Where(t => t.RunTime >= _date.Value.Date && t.RunTime < _date.Value.Date.AddDays(1));
}
_total = (int)(await query.CountAsync());
_list = await query.OrderByDescending(t => t.RunTime).ToPageListAsync(_page, _pageSize);
foreach (KpTaskRun kpTaskRun in _list)
{
kpTaskRun.RunResultCount = (int)(await _session.Queryable<KpTaskResult>().Where(t => t.TaskRunId == kpTaskRun.Id).CountAsync());
}
https://gitee.com/s0611163/Dapper.LiteSql/blob/main/README.md
https://gitee.com/s0611163/Dapper.LiteSql/wikis
https://www.nuget.org/packages/Dapper.LiteSql
如有问题加QQ群:497956447。
https://gitee.com/s0611163/Dapper.LiteSql
https://gitee.com/s0611163/ModelGenerator
https://gitee.com/s0611163/ClickHouseTest
DateTime dayStart = day.Date.AddHours(7);
DateTime dayEnd = day.Date.AddHours(9).AddSeconds(-1);
List<Vehicle> list = session.CreateSql<Vehicle>(@"
select distinct t.plate_no, t.tollgate_name3, t.pass_time
from shiny.vehicle_full_replica_dist t
").Where(t => t.PlateNo != "无车牌")
.Where(t => t.PassTime >= startTime && t.PassTime <= endTime)
.Where(t => t.PassTime >= dayStart && t.PassTime <= dayEnd)
.Append("and (")
.Append(@"(t.""tollgate_name3"" like @A1 and t.""tollgate_name3"" like @B1)", new { A1 = "%六安路%", B1 = "%寿春路%" })
.Append(@"or (t.""tollgate_name3"" like @A2)", new { A2 = "%龚湾路%" })
.Append(@"or (t.""tollgate_name3"" like @A3 and t.""tollgate_name3"" like @B3)", new { A3 = "%大龙山路%", B3 = "%望江西路%" })
.Append(@"or (t.""tollgate_name3"" like @A4 and t.""tollgate_name3"" like @B4)", new { A4 = "%大龙山路%", B4 = "%云飞路%" })
.Append(@"or (t.""tollgate_name3"" like @A5 and t.""tollgate_name3"" like @B5)", new { A5 = "%习友路%", B5 = "%徽毫路%" })
.Append(@"or (t.""tollgate_name3"" like @A6 and t.""tollgate_name3"" like @B6)", new { A6 = "%祁门路%", B6 = "%徽毫路%" })
.Append(@"or (t.""tollgate_name3"" like @A7 and t.""tollgate_name3"" like @B7)", new { A7 = "%长沙路%", B7 = "%西藏路%" })
.Append(@"or (t.""tollgate_name3"" like @A8 and t.""tollgate_name3"" like @B8)", new { A8 = "%洞庭湖路%", B8 = "%西藏路%" })
.Append(@"or (t.""tollgate_name3"" like @A9 and t.""tollgate_name3"" like @B9)", new { A9 = "%洞庭湖路%", B9 = "%玉龙路%" })
.Append(@"or (t.""tollgate_name3"" like @A10 and t.""tollgate_name3"" like @B10)", new { A10 = "%长沙路%", B10 = "%玉龙路%" })
.Append(")")
.QueryList<Vehicle>();
List<Vehicle> list = session.CreateSql<Vehicle>(@"
select plate_no, pass_date as pass_time, max(TravelCount) as TravelCount
from (
select plate_no, toDate(pass_time) as pass_date, tollgate_name3, count(*) as TravelCount
from (
select distinct t.plate_no, t.pass_time, t.tollgate_name3
from shiny.vehicle_full_replica_dist t
").Where(t => t.PlateNo != "无车牌")
.Where(t => t.PassTime >= startTime && t.PassTime <= endTime)
.Where(t => plateNoList.Contains(t.PlateNo))
.Where(@"(
(formatDateTime(t.pass_time ,'%H:%M:%S') >= '07:00:00' and formatDateTime(t.pass_time ,'%H:%M:%S') <= '08:59:59') or
(formatDateTime(t.pass_time ,'%H:%M:%S') >= '14:00:00' and formatDateTime(t.pass_time ,'%H:%M:%S') <= '20:59:59')
)")
.Append(@")")
.GroupBy("plate_no, pass_date, tollgate_name3")
.Append(@")
group by plate_no, pass_time
")
.QueryList<Vehicle>();
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph
@raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束
我想从then子句中访问case语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案