mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 04:18:16 +08:00
- 增加 Array.Any(x => x.id == a.Id && ..) 表达式树解析;#243
This commit is contained in:
@ -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()
|
||||
{
|
||||
|
Reference in New Issue
Block a user