- 增加 IncludeMany 贪婪加载的时候可指定子表的字段,避免查询子表所有字段;

This commit is contained in:
28810
2019-11-18 03:22:34 +08:00
parent 769c1f020c
commit 1083f371a9
16 changed files with 1899 additions and 343 deletions

View File

@ -425,10 +425,6 @@ namespace FreeSql.Tests.Odbc.MySql
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid", sql);
query.ToList();
query = select.LeftJoin("TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", sql);
query.ToList();
}
[Fact]
public void InnerJoin()
@ -494,11 +490,6 @@ namespace FreeSql.Tests.Odbc.MySql
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a INNER JOIN TestTypeInfo b on b.Guid = a.TypeGuid", sql);
query.ToList();
query = select.InnerJoin("TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a INNER JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", sql);
query.ToList();
}
[Fact]
public void RightJoin()
@ -564,11 +555,6 @@ namespace FreeSql.Tests.Odbc.MySql
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a RIGHT JOIN TestTypeInfo b on b.Guid = a.TypeGuid", sql);
query.ToList();
query = select.RightJoin("TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a RIGHT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", sql);
query.ToList();
}
[Fact]
public void Where()
@ -635,11 +621,6 @@ namespace FreeSql.Tests.Odbc.MySql
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a, `TestTypeInfo` b, `TestTypeParentInfo` c WHERE (a.`Id` = 10 AND c.`Name` = 'xxx') AND (b.`ParentId` = 20)", sql);
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.Where("a.clicks > 100 and a.id = ?", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a WHERE (a.clicks > 100 and a.id = ?)", sql);
query.ToList();
}
[Fact]
public void WhereIf()
@ -683,12 +664,6 @@ namespace FreeSql.Tests.Odbc.MySql
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a, `TestTypeInfo` b, `TestTypeParentInfo` c WHERE (a.`Id` = 10 AND c.`Name` = 'xxx') AND (b.`ParentId` = 20)", sql);
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(true, "a.clicks > 100 and a.id = ?", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a WHERE (a.clicks > 100 and a.id = ?)", sql);
query.ToList();
// ==========================================WhereIf(false)
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -729,12 +704,6 @@ namespace FreeSql.Tests.Odbc.MySql
sql = query2.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a, `TestTypeInfo` b, `TestTypeParentInfo` c", sql);
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(false, "a.clicks > 100 and a.id = ?", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a", sql);
query.ToList();
}
[Fact]
public void WhereExists()
@ -1090,6 +1059,40 @@ namespace FreeSql.Tests.Odbc.MySql
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id)))
.Where(a => a.id <= model1.id)
.ToList();
//---- Select ----
var at0 = g.mysql.Select<TestInclude_OneToManyModel2>()
.IncludeMany(a => a.childs.Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at1 = g.mysql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at2 = g.mysql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TestInclude_OneToManyModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
var at00 = g.mysql.Select<TestInclude_OneToManyModel2>()
.IncludeMany(a => a.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at11 = g.mysql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at22 = g.mysql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TestInclude_OneToManyModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
}
public class TestInclude_OneToManyModel11
@ -1107,6 +1110,8 @@ namespace FreeSql.Tests.Odbc.MySql
[Column(IsIdentity = true)]
public int id { get; set; }
public string m2setting { get; set; }
public string aaa { get; set; }
public string bbb { get; set; }
public List<TestInclude_OneToManyModel33> childs { get; set; }
}
public class TestInclude_OneToManyModel33
@ -1121,7 +1126,7 @@ namespace FreeSql.Tests.Odbc.MySql
public void Include_OneToMany2()
{
string setting = "x";
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString(), aaa = "aaa" + DateTime.Now.Second, bbb = "bbb" + DateTime.Now.Second };
model2.id = (int)g.mysql.Insert(model2).ExecuteIdentity();
var model3s = new[]
@ -1146,6 +1151,20 @@ namespace FreeSql.Tests.Odbc.MySql
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting))
.Where(a => a.id <= model1.id)
.ToList(true);
//---- Select ----
var at1 = g.mysql.Select<TestInclude_OneToManyModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TestInclude_OneToManyModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
var at11 = g.mysql.Select<TestInclude_OneToManyModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TestInclude_OneToManyModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
}
[Fact]
@ -1243,6 +1262,59 @@ namespace FreeSql.Tests.Odbc.MySql
.IncludeMany(a => a.Songs.Take(1))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
// --- Select ---
var atags0 = g.mysql.Select<Tag>()
.Include(a => a.Parent)
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags1 = g.mysql.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags2 = g.mysql.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags3 = g.mysql.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags11 = g.mysql.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags22 = g.mysql.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags33 = g.mysql.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
}
[Fact]
@ -1347,6 +1419,61 @@ namespace FreeSql.Tests.Odbc.MySql
.IncludeMany(a => a.Tag.Songs.Take(1))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
// --- Select ---
new List<Song>(new[] { song1, song2, song3 }).IncludeMany(g.mysql, a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }));
var asongs1 = g.mysql.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs1.Count);
Assert.Equal(2, songs1[0].Tags.Count);
Assert.Equal(1, songs1[1].Tags.Count);
Assert.Equal(3, songs1[2].Tags.Count);
var asongs2 = g.mysql.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs2.Count);
Assert.Equal(2, songs2[0].Tags.Count);
Assert.Equal(1, songs2[1].Tags.Count);
Assert.Equal(3, songs2[2].Tags.Count);
var atags3 = g.mysql.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
var asongs11 = g.mysql.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs11.Count);
Assert.Equal(1, songs11[0].Tags.Count);
Assert.Equal(1, songs11[1].Tags.Count);
Assert.Equal(1, songs11[2].Tags.Count);
var asongs22 = g.mysql.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs22.Count);
Assert.Equal(1, songs22[0].Tags.Count);
Assert.Equal(1, songs22[1].Tags.Count);
Assert.Equal(1, songs22[2].Tags.Count);
var atags33 = g.mysql.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
}
public class ToDel1Pk

View File

@ -136,9 +136,9 @@ namespace FreeSql.Tests.Odbc.Oracle
//items = Enumerable.Range(0, 9989).Select(a => new TopicInserts { Title = "newtitle" + a, CreateTime = DateTime.Now }).ToList();
//Assert.Equal(9989, g.oracle.Insert<TopicInserts>(items).ExecuteAffrows());
var dt1 = select.Limit(10).ToDataTable();
var dt2 = select.Limit(10).ToDataTable("id, 111222");
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now.ToString() });
//var dt1 = select.ToDataTable();
//var dt2 = select.ToDataTable("id, 111222");
//var dt3 = select.ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
}
class TestDto
{
@ -380,9 +380,9 @@ namespace FreeSql.Tests.Odbc.Oracle
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\"", sql);
query.ToList();
query = select.InnerJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = ?", new { bname = "xxx" });
query = select.InnerJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = :bname", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = ?", sql);
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = :bname", sql);
query.ToList();
}
@ -450,9 +450,9 @@ namespace FreeSql.Tests.Odbc.Oracle
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\"", sql);
query.ToList();
query = select.RightJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = ?", new { bname = "xxx" });
query = select.RightJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = :bname", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = ?", sql);
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = :bname", sql);
query.ToList();
}
@ -521,9 +521,9 @@ namespace FreeSql.Tests.Odbc.Oracle
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.Where("a.\"CLICKS\" > 100 and a.\"ID\" = ?", new { id = 10 });
query = select.Where("a.\"CLICKS\" > 100 and a.\"ID\" = :id", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CLICKS\" > 100 and a.\"ID\" = ?)", sql);
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CLICKS\" > 100 and a.\"ID\" = :id)", sql);
query.ToList();
}
[Fact]
@ -569,9 +569,9 @@ namespace FreeSql.Tests.Odbc.Oracle
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(true, "a.\"CLICKS\" > 100 and a.\"ID\" = ?", new { id = 10 });
query = select.WhereIf(true, "a.\"CLICKS\" > 100 and a.\"ID\" = :id", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CLICKS\" > 100 and a.\"ID\" = ?)", sql);
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CLICKS\" > 100 and a.\"ID\" = :id)", sql);
query.ToList();
// ==========================================WhereIf(false)
@ -616,7 +616,7 @@ namespace FreeSql.Tests.Odbc.Oracle
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(false, "a.\"CLICKS\" > 100 and a.\"ID\" = ?", new { id = 10 });
query = select.WhereIf(false, "a.\"CLICKS\" > 100 and a.\"ID\" = :id", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
query.ToList();
@ -975,6 +975,40 @@ namespace FreeSql.Tests.Odbc.Oracle
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id)))
.Where(a => a.id <= model1.id)
.ToList();
//---- Select ----
var at0 = g.oracle.Select<TiOtmModel2>()
.IncludeMany(a => a.childs.Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TiOtmModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at1 = g.oracle.Select<TiOtmModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TiOtmModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at2 = g.oracle.Select<TiOtmModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TiOtmModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TiOtmModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
var at00 = g.oracle.Select<TiOtmModel2>()
.IncludeMany(a => a.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TiOtmModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at11 = g.oracle.Select<TiOtmModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TiOtmModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at22 = g.oracle.Select<TiOtmModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TiOtmModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TiOtmModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
}
public class TiOtmModel11
@ -992,6 +1026,8 @@ namespace FreeSql.Tests.Odbc.Oracle
[Column(IsIdentity = true)]
public int id { get; set; }
public string m2setting { get; set; }
public string aaa { get; set; }
public string bbb { get; set; }
public List<TiOtmModel33> childs { get; set; }
}
public class TiOtmModel33
@ -1006,7 +1042,7 @@ namespace FreeSql.Tests.Odbc.Oracle
public void Include_OneToMany2()
{
string setting = "x";
var model2 = new TiOtmModel22 { m2setting = DateTime.Now.Second.ToString() };
var model2 = new TiOtmModel22 { m2setting = DateTime.Now.Second.ToString(), aaa = "aaa" + DateTime.Now.Second, bbb = "bbb" + DateTime.Now.Second };
model2.id = (int)g.oracle.Insert(model2).ExecuteIdentity();
var model3s = new[]
@ -1031,6 +1067,20 @@ namespace FreeSql.Tests.Odbc.Oracle
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting))
.Where(a => a.id <= model1.id)
.ToList(true);
//---- Select ----
var at1 = g.oracle.Select<TiOtmModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TiOtmModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
var at11 = g.oracle.Select<TiOtmModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TiOtmModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
}
[Fact]
@ -1128,6 +1178,59 @@ namespace FreeSql.Tests.Odbc.Oracle
.IncludeMany(a => a.Songs.Take(1))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
// --- Select ---
var atags0 = g.oracle.Select<Tag>()
.Include(a => a.Parent)
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags1 = g.oracle.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags2 = g.oracle.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags3 = g.oracle.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags11 = g.oracle.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags22 = g.oracle.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags33 = g.oracle.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
}
[Fact]
@ -1232,6 +1335,61 @@ namespace FreeSql.Tests.Odbc.Oracle
.IncludeMany(a => a.Tag.Songs.Take(1))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
// --- Select ---
new List<Song>(new[] { song1, song2, song3 }).IncludeMany(g.oracle, a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }));
var asongs1 = g.oracle.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs1.Count);
Assert.Equal(2, songs1[0].Tags.Count);
Assert.Equal(1, songs1[1].Tags.Count);
Assert.Equal(3, songs1[2].Tags.Count);
var asongs2 = g.oracle.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs2.Count);
Assert.Equal(2, songs2[0].Tags.Count);
Assert.Equal(1, songs2[1].Tags.Count);
Assert.Equal(3, songs2[2].Tags.Count);
var atags3 = g.oracle.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
var asongs11 = g.oracle.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs11.Count);
Assert.Equal(1, songs11[0].Tags.Count);
Assert.Equal(1, songs11[1].Tags.Count);
Assert.Equal(1, songs11[2].Tags.Count);
var asongs22 = g.oracle.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs22.Count);
Assert.Equal(1, songs22[0].Tags.Count);
Assert.Equal(1, songs22[1].Tags.Count);
Assert.Equal(1, songs22[2].Tags.Count);
var atags33 = g.oracle.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
}
public class ToDel1Pk

View File

@ -389,11 +389,6 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a LEFT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\"", sql);
query.ToList();
query = select.LeftJoin("\"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a LEFT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", sql);
query.ToList();
}
[Fact]
public void InnerJoin()
@ -458,12 +453,6 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a INNER JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\"", sql);
query.ToList();
query = select.InnerJoin("\"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a INNER JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", sql);
query.ToList();
}
[Fact]
public void RightJoin()
@ -528,12 +517,6 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a RIGHT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\"", sql);
query.ToList();
query = select.RightJoin("\"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a RIGHT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", sql);
query.ToList();
}
[Fact]
public void Where()
@ -600,9 +583,9 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.Where("a.\"clicks\" > 100 and a.\"id\" = ?", new { id = 10 });
query = select.Where("a.\"clicks\" > 100 and a.\"id\" = @id", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE (a.\"clicks\" > 100 and a.\"id\" = ?)", sql);
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE (a.\"clicks\" > 100 and a.\"id\" = @id)", sql);
query.ToList();
}
[Fact]
@ -648,9 +631,9 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(true, "a.\"clicks\" > 100 and a.\"id\" = ?", new { id = 10 });
query = select.WhereIf(true, "a.\"clicks\" > 100 and a.\"id\" = @id", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE (a.\"clicks\" > 100 and a.\"id\" = ?)", sql);
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE (a.\"clicks\" > 100 and a.\"id\" = @id)", sql);
query.ToList();
// ==========================================WhereIf(false)
@ -695,7 +678,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(false, "a.\"clicks\" > 100 and a.\"id\" = ?", new { id = 10 });
query = select.WhereIf(false, "a.\"clicks\" > 100 and a.\"id\" = @id", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a", sql);
query.ToList();
@ -951,9 +934,9 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topicastable1\" a LEFT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\"", sql);
query = select.LeftJoin("\"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", new { bname = "xxx" }).AsTable(tableRule);
query = select.LeftJoin("\"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = @bname", new { bname = "xxx" }).AsTable(tableRule);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topicastable1\" a LEFT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = ?", sql);
Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topicastable1\" a LEFT JOIN \"testtypeinfo\" b on b.\"guid\" = a.\"typeguid\" and b.\"name\" = @bname", sql);
}
public class TestInclude_OneToManyModel1
@ -1048,6 +1031,40 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id)))
.Where(a => a.id <= model1.id)
.ToList();
//---- Select ----
var at0 = g.pgsql.Select<TestInclude_OneToManyModel2>()
.IncludeMany(a => a.childs.Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at1 = g.pgsql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at2 = g.pgsql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TestInclude_OneToManyModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
var at00 = g.pgsql.Select<TestInclude_OneToManyModel2>()
.IncludeMany(a => a.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at11 = g.pgsql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at22 = g.pgsql.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TestInclude_OneToManyModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
}
public class TestInclude_OneToManyModel11
@ -1065,6 +1082,8 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
[Column(IsIdentity = true)]
public int id { get; set; }
public string m2setting { get; set; }
public string aaa { get; set; }
public string bbb { get; set; }
public List<TestInclude_OneToManyModel33> childs { get; set; }
}
public class TestInclude_OneToManyModel33
@ -1079,7 +1098,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
public void Include_OneToMany2()
{
string setting = "x";
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString(), aaa = "aaa" + DateTime.Now.Second, bbb = "bbb" + DateTime.Now.Second };
model2.id = (int)g.pgsql.Insert(model2).ExecuteIdentity();
var model3s = new[]
@ -1104,6 +1123,20 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting))
.Where(a => a.id <= model1.id)
.ToList(true);
//---- Select ----
var at1 = g.pgsql.Select<TestInclude_OneToManyModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TestInclude_OneToManyModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
var at11 = g.pgsql.Select<TestInclude_OneToManyModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TestInclude_OneToManyModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
}
[Fact]
@ -1201,6 +1234,59 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
.IncludeMany(a => a.Songs.Take(1))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
// --- Select ---
var atags0 = g.pgsql.Select<Tag>()
.Include(a => a.Parent)
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags1 = g.pgsql.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags2 = g.pgsql.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags3 = g.pgsql.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags11 = g.pgsql.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags22 = g.pgsql.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags33 = g.pgsql.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
}
[Fact]
@ -1305,6 +1391,61 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
.IncludeMany(a => a.Tag.Songs.Take(1))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
// --- Select ---
new List<Song>(new[] { song1, song2, song3 }).IncludeMany(g.pgsql, a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }));
var asongs1 = g.pgsql.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs1.Count);
Assert.Equal(2, songs1[0].Tags.Count);
Assert.Equal(1, songs1[1].Tags.Count);
Assert.Equal(3, songs1[2].Tags.Count);
var asongs2 = g.pgsql.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs2.Count);
Assert.Equal(2, songs2[0].Tags.Count);
Assert.Equal(1, songs2[1].Tags.Count);
Assert.Equal(3, songs2[2].Tags.Count);
var atags3 = g.pgsql.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
var asongs11 = g.pgsql.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs11.Count);
Assert.Equal(1, songs11[0].Tags.Count);
Assert.Equal(1, songs11[1].Tags.Count);
Assert.Equal(1, songs11[2].Tags.Count);
var asongs22 = g.pgsql.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs22.Count);
Assert.Equal(1, songs22[0].Tags.Count);
Assert.Equal(1, songs22[1].Tags.Count);
Assert.Equal(1, songs22[2].Tags.Count);
var atags33 = g.pgsql.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
}
public class ToDel1Pk

View File

@ -6,7 +6,6 @@ using Xunit;
namespace FreeSql.Tests.Odbc.SqlServer
{
[Collection("SqlServerCollection")]
public class SqlServerSelectTest
{
ISelect<Topic> select => g.sqlserver.Select<Topic>();
@ -141,7 +140,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
[Fact]
public void ToList()
{
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
var testDto2 = select.Limit(10).ToList(a => new TestDto());
var testDto3 = select.Limit(10).ToList(a => new TestDto { });
@ -303,11 +301,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid", sql);
query.ToList();
query = select.LeftJoin("TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", sql);
query.ToList();
}
[Fact]
public void InnerJoin()
@ -372,12 +365,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a INNER JOIN TestTypeInfo b on b.Guid = a.TypeGuid", sql);
query.ToList();
query = select.InnerJoin("TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a INNER JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", sql);
query.ToList();
}
[Fact]
public void RightJoin()
@ -442,12 +429,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a RIGHT JOIN TestTypeInfo b on b.Guid = a.TypeGuid", sql);
query.ToList();
query = select.RightJoin("TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", new { bname = "xxx" });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a RIGHT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?", sql);
query.ToList();
}
[Fact]
public void Where()
@ -512,12 +493,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
sql = query2.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a, [TestTypeInfo] b, [TestTypeParentInfo] c WHERE (a.[Id] = 10 AND c.[Name] = N'xxx') AND (b.[ParentId] = 20)", sql);
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.Where("a.clicks > 100 and a.id = ?", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a WHERE (a.clicks > 100 and a.id = ?)", sql);
query.ToList();
}
[Fact]
public void WhereIf()
@ -561,12 +536,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a, [TestTypeInfo] b, [TestTypeParentInfo] c WHERE (a.[Id] = 10 AND c.[Name] = N'xxx') AND (b.[ParentId] = 20)", sql);
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(true, "a.clicks > 100 and a.id = ?", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a WHERE (a.clicks > 100 and a.id = ?)", sql);
query.ToList();
// ==========================================WhereIf(false)
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -607,12 +576,6 @@ namespace FreeSql.Tests.Odbc.SqlServer
sql = query2.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a, [TestTypeInfo] b, [TestTypeParentInfo] c", sql);
query2.ToList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><E3B2BB>
query = select.WhereIf(false, "a.clicks > 100 and a.id = ?", new { id = 10 });
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a", sql);
query.ToList();
}
[Fact]
public void WhereExists()
@ -962,6 +925,40 @@ namespace FreeSql.Tests.Odbc.SqlServer
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id)))
.Where(a => a.id <= model1.id)
.ToList();
//---- Select ----
var at0 = g.sqlserver.Select<TestInclude_OneToManyModel2>()
.IncludeMany(a => a.childs.Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at1 = g.sqlserver.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at2 = g.sqlserver.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TestInclude_OneToManyModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
var at00 = g.sqlserver.Select<TestInclude_OneToManyModel2>()
.IncludeMany(a => a.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.model2id <= model1.id)
.ToList();
var at11 = g.sqlserver.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }))
.Where(a => a.id <= model1.id)
.ToList();
var at22 = g.sqlserver.Select<TestInclude_OneToManyModel1>()
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2111Idaaa == a.model2.model2id).Select(m3 => new TestInclude_OneToManyModel3 { id = m3.id }),
then => then.IncludeMany(m3 => m3.childs2.Take(2).Where(m4 => m4.model3333Id333 == m3.id).Select(m4 => new TestInclude_OneToManyModel4 { id = m4.id })))
.Where(a => a.id <= model1.id)
.ToList();
}
public class TestInclude_OneToManyModel11
@ -979,6 +976,8 @@ namespace FreeSql.Tests.Odbc.SqlServer
[Column(IsIdentity = true)]
public int id { get; set; }
public string m2setting { get; set; }
public string aaa { get; set; }
public string bbb { get; set; }
public List<TestInclude_OneToManyModel33> childs { get; set; }
}
public class TestInclude_OneToManyModel33
@ -993,7 +992,7 @@ namespace FreeSql.Tests.Odbc.SqlServer
public void Include_OneToMany2()
{
string setting = "x";
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString(), aaa = "aaa" + DateTime.Now.Second, bbb = "bbb" + DateTime.Now.Second };
model2.id = (int)g.sqlserver.Insert(model2).ExecuteIdentity();
var model3s = new[]
@ -1018,6 +1017,20 @@ namespace FreeSql.Tests.Odbc.SqlServer
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting))
.Where(a => a.id <= model1.id)
.ToList(true);
//---- Select ----
var at1 = g.sqlserver.Select<TestInclude_OneToManyModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TestInclude_OneToManyModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
var at11 = g.sqlserver.Select<TestInclude_OneToManyModel11>()
.LeftJoin(a => a.model2id == a.model2.id)
.IncludeMany(a => a.model2.childs.Take(1).Where(m3 => m3.model2Id == a.model2.id && m3.setting == a.m3setting).Select(m3 => new TestInclude_OneToManyModel33 { title = m3.title }))
.Where(a => a.id <= model1.id)
.ToList(true);
}
[Fact]
@ -1115,6 +1128,59 @@ namespace FreeSql.Tests.Odbc.SqlServer
.IncludeMany(a => a.Songs.Take(1))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
// --- Select ---
var atags0 = g.sqlserver.Select<Tag>()
.Include(a => a.Parent)
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags1 = g.sqlserver.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags2 = g.sqlserver.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags3 = g.sqlserver.Select<Tag>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags11 = g.sqlserver.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags22 = g.sqlserver.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
var atags33 = g.sqlserver.Select<Tag>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })).IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name })))
.Include(a => a.Parent)
.IncludeMany(a => a.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
.ToList();
}
[Fact]
@ -1219,6 +1285,61 @@ namespace FreeSql.Tests.Odbc.SqlServer
.IncludeMany(a => a.Tag.Songs.Take(1))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
// --- Select ---
new List<Song>(new[] { song1, song2, song3 }).IncludeMany(g.sqlserver, a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }));
var asongs1 = g.sqlserver.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs1.Count);
Assert.Equal(2, songs1[0].Tags.Count);
Assert.Equal(1, songs1[1].Tags.Count);
Assert.Equal(3, songs1[2].Tags.Count);
var asongs2 = g.sqlserver.Select<Song>()
.IncludeMany(a => a.Tags.Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs2.Count);
Assert.Equal(2, songs2[0].Tags.Count);
Assert.Equal(1, songs2[1].Tags.Count);
Assert.Equal(3, songs2[2].Tags.Count);
var atags3 = g.sqlserver.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
var asongs11 = g.sqlserver.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs11.Count);
Assert.Equal(1, songs11[0].Tags.Count);
Assert.Equal(1, songs11[1].Tags.Count);
Assert.Equal(1, songs11[2].Tags.Count);
var asongs22 = g.sqlserver.Select<Song>()
.IncludeMany(a => a.Tags.Take(1).Select(b => new Tag { Id = b.Id, Name = b.Name }),
then => then.IncludeMany(t => t.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title })))
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
.ToList();
Assert.Equal(3, songs22.Count);
Assert.Equal(1, songs22[0].Tags.Count);
Assert.Equal(1, songs22[1].Tags.Count);
Assert.Equal(1, songs22[2].Tags.Count);
var atags33 = g.sqlserver.Select<Song_tag>()
.Include(a => a.Tag.Parent)
.IncludeMany(a => a.Tag.Songs.Take(1).Select(b => new Song { Id = b.Id, Title = b.Title }))
.Where(a => a.Tag.Id == tag1.Id || a.Tag.Id == tag2.Id)
.ToList(true);
}
public class ToDel1Pk