- 修复 $"{a.Code}_{a.Id}" lambda 解析当 {} 多于3个时的 bug(.net 内部机制很坑);

> 3个 {} 时,Arguments[1..3] 解析出来是分开的
> 4个 {} 时,Arguments[1] 只能解析这个出来,然后 [1] 里面是 NewArray []
This commit is contained in:
28810
2020-07-29 10:59:47 +08:00
parent c2749bad65
commit de86beba4f
30 changed files with 445 additions and 30 deletions

View File

@ -75,6 +75,31 @@ WHERE (a.`Id` = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
[Fact]
public void Format4()
{
//3<><33> {} ʱ<><CAB1>Arguments <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿֿ<C7B7><D6BF><EFBFBD>
//4<><34> {} ʱ<><CAB1>Arguments[1] ֻ<>ܽ<EFBFBD><DCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NewArray []
var item = g.mysql.GetRepository<Topic>().Insert(new Topic { Clicks = 101, Title = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>101", CreateTime = DateTime.Parse("2020-7-5") });
var sql = select.WhereDynamic(item).ToSql(a => new
{
str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
});
Assert.Equal($@"SELECT concat('x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as1, concat('',ifnull((a.`Id` + 1), ''),'x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as2
FROM `tb_topic` a
WHERE (a.`Id` = {item.Id})", sql);
var item2 = select.WhereDynamic(item).First(a => new
{
str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
});
Assert.NotNull(item2);
Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
}
[Fact]
public void Empty()
{