- 增加 Array.Any(x => x.id == a.Id && ..) 表达式树解析;#243

This commit is contained in:
2881099
2022-05-24 15:18:46 +08:00
parent 5a9c92bc54
commit 3a7533246e
3 changed files with 186 additions and 4 deletions

View File

@ -15,6 +15,75 @@ namespace FreeSql.Tests.SqliteExpression
{
}
[Fact]
public void ArrayAny()
{
var fsql = g.sqlite;
fsql.Delete<ArrayAny01>().Where("1=1").ExecuteAffrows();
var t1 = fsql.Select<ArrayAny01>().Where(a => new[] {
new ArrayAny02 { Name1 = "name01", Click1 = 1 },
}.Any(b => b.Name1 == a.Name && b.Click1 == a.Click || a.Click > 10)).ToSql();
Assert.Equal(@"SELECT a.""Id"", a.""Name"", a.""Click""
FROM ""ArrayAny01"" a
WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10))", t1);
var t2 = fsql.Select<ArrayAny01>().Where(a => new[] {
new ArrayAny02 { Name1 = "name01", Click1 = 1 },
new ArrayAny02 { Name1 = "name02", Click1 = 2 },
}.Any(b => b.Name1 == a.Name && b.Click1 == a.Click || a.Click > 10)).ToSql();
Assert.Equal(@"SELECT a.""Id"", a.""Name"", a.""Click""
FROM ""ArrayAny01"" a
WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10) OR ('name02' = a.""Name"" AND 2 = a.""Click"" OR a.""Click"" > 10))", t1);
var aa03 = new[] {
new ArrayAny02 { Name1 = "name01", Click1 = 1 },
};
var t3 = fsql.Select<ArrayAny01>().Where(a => aa03.Any(b => b.Name1 == a.Name && b.Click1 == a.Click || a.Click > 10)).ToSql();
Assert.Equal(@"SELECT a.""Id"", a.""Name"", a.""Click""
FROM ""ArrayAny01"" a
WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10))", t1);
var aa04 = new[] {
new ArrayAny02 { Name1 = "name01", Click1 = 1 },
new ArrayAny02 { Name1 = "name02", Click1 = 2 },
};
var t4 = fsql.Select<ArrayAny01>().Where(a => aa04.Any(b => b.Name1 == a.Name && b.Click1 == a.Click || a.Click > 10)).ToSql();
Assert.Equal(@"SELECT a.""Id"", a.""Name"", a.""Click""
FROM ""ArrayAny01"" a
WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10) OR ('name02' = a.""Name"" AND 2 = a.""Click"" OR a.""Click"" > 10))", t1);
// List
var aa05 = new List<ArrayAny02> {
new ArrayAny02 { Name1 = "name01", Click1 = 1 },
};
var t5 = fsql.Select<ArrayAny01>().Where(a => aa05.Any(b => b.Name1 == a.Name && b.Click1 == a.Click || a.Click > 10)).ToSql();
Assert.Equal(@"SELECT a.""Id"", a.""Name"", a.""Click""
FROM ""ArrayAny01"" a
WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10))", t1);
var aa06 = new List<ArrayAny02> {
new ArrayAny02 { Name1 = "name01", Click1 = 1 },
new ArrayAny02 { Name1 = "name02", Click1 = 2 },
};
var t6 = fsql.Select<ArrayAny01>().Where(a => aa06.Any(b => b.Name1 == a.Name && b.Click1 == a.Click || a.Click > 10)).ToSql();
Assert.Equal(@"SELECT a.""Id"", a.""Name"", a.""Click""
FROM ""ArrayAny01"" a
WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10) OR ('name02' = a.""Name"" AND 2 = a.""Click"" OR a.""Click"" > 10))", t1);
}
class ArrayAny01
{
public Guid Id { get; set; }
public string Name { get; set; }
public long Click { get; set; }
}
class ArrayAny02
{
public string Name1 { get; set; }
public long Click1 { get; set; }
}
[Fact]
public void Div()
{