mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
- 增加 linq to sql 的查询语法,以及单元测试;
This commit is contained in:
187
FreeSql.Tests/LinqToSql/SqliteLinqToSqlTests.cs
Normal file
187
FreeSql.Tests/LinqToSql/SqliteLinqToSqlTests.cs
Normal file
@ -0,0 +1,187 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.LinqToSql {
|
||||
|
||||
|
||||
class TestLinqToSql {
|
||||
public Guid id { get; set; }
|
||||
|
||||
public string name { get; set; }
|
||||
|
||||
public int click { get; set; } = 10;
|
||||
|
||||
public DateTime createtime { get; set; } = DateTime.Now;
|
||||
}
|
||||
class TestLinqToSqlComment {
|
||||
public Guid id { get; set; }
|
||||
|
||||
public Guid TestLinqToSqlId { get; set; }
|
||||
public TestLinqToSql TEstLinqToSql { get; set; }
|
||||
|
||||
public string text { get; set; }
|
||||
|
||||
public DateTime createtime { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
public class SqliteLinqToSqlTests {
|
||||
|
||||
[Fact]
|
||||
public void Where() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
where a.id == item.id
|
||||
select a).ToList();
|
||||
Assert.True(t1.Any());
|
||||
Assert.Equal(item.id, t1[0].id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Select() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
where a.id == item.id
|
||||
select new { a.id }).ToList();
|
||||
Assert.True(t1.Any());
|
||||
Assert.Equal(item.id, t1[0].id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GroupBy() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
where a.id == item.id
|
||||
group a by new {a.id, a.name } into g
|
||||
select new {
|
||||
g.Key.id, g.Key.name,
|
||||
cou = g.Count(),
|
||||
avg = g.Avg(g.Value.click),
|
||||
sum = g.Sum(g.Value.click),
|
||||
max = g.Max(g.Value.click),
|
||||
min = g.Min(g.Value.click)
|
||||
}).ToList();
|
||||
Assert.True(t1.Any());
|
||||
Assert.Equal(item.id, t1.First().id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CaseWhen() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
where a.id == item.id
|
||||
select new {
|
||||
a.id,
|
||||
a.name,
|
||||
testsub = new {
|
||||
time = a.click > 10 ? "<22><><EFBFBD><EFBFBD>" : "С<>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>"
|
||||
}
|
||||
}).ToList();
|
||||
Assert.True(t1.Any());
|
||||
Assert.Equal(item.id, t1[0].id);
|
||||
Assert.Equal("С<>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>", t1[0].testsub.time);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Join() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSqlComment>().AppendData(comment).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
join b in g.sqlite.Select<TestLinqToSqlComment>() on a.id equals b.TestLinqToSqlId
|
||||
select a).ToList();
|
||||
Assert.True(t1.Any());
|
||||
//Assert.Equal(item.id, t1[0].id);
|
||||
|
||||
var t2 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
join b in g.sqlite.Select<TestLinqToSqlComment>() on a.id equals b.TestLinqToSqlId
|
||||
select new { a.id, bid = b.id }).ToList();
|
||||
Assert.True(t2.Any());
|
||||
//Assert.Equal(item.id, t2[0].id);
|
||||
//Assert.Equal(comment.id, t2[0].bid);
|
||||
|
||||
var t3 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
join b in g.sqlite.Select<TestLinqToSqlComment>() on a.id equals b.TestLinqToSqlId
|
||||
where a.id == item.id
|
||||
select new { a.id, bid = b.id }).ToList();
|
||||
Assert.True(t3.Any());
|
||||
Assert.Equal(item.id, t3[0].id);
|
||||
Assert.Equal(comment.id, t3[0].bid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LeftJoin() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSqlComment>().AppendData(comment).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
join b in g.sqlite.Select<TestLinqToSqlComment>() on a.id equals b.TestLinqToSqlId into temp
|
||||
from tc in temp.DefaultIfEmpty()
|
||||
select a).ToList();
|
||||
Assert.True(t1.Any());
|
||||
//Assert.Equal(item.id, t1[0].id);
|
||||
|
||||
var t2 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
join b in g.sqlite.Select<TestLinqToSqlComment>() on a.id equals b.TestLinqToSqlId into temp
|
||||
from tc in temp.DefaultIfEmpty()
|
||||
select new { a.id, bid = tc.id }).ToList();
|
||||
Assert.True(t2.Any());
|
||||
//Assert.Equal(item.id, t2[0].id);
|
||||
//Assert.Equal(comment.id, t2[0].bid);
|
||||
|
||||
var t3 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
join b in g.sqlite.Select<TestLinqToSqlComment>() on a.id equals b.TestLinqToSqlId into temp
|
||||
from tc in temp.DefaultIfEmpty()
|
||||
where a.id == item.id
|
||||
select new { a.id, bid = tc.id }).ToList();
|
||||
Assert.True(t3.Any());
|
||||
Assert.Equal(item.id, t3[0].id);
|
||||
Assert.Equal(comment.id, t3[0].bid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void From() {
|
||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
||||
g.sqlite.Insert<TestLinqToSqlComment>().AppendData(comment).ExecuteAffrows();
|
||||
|
||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
from b in g.sqlite.Select<TestLinqToSqlComment>()
|
||||
where a.id == b.TestLinqToSqlId
|
||||
select a).ToList();
|
||||
Assert.True(t1.Any());
|
||||
//Assert.Equal(item.id, t1[0].id);
|
||||
|
||||
var t2 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
from b in g.sqlite.Select<TestLinqToSqlComment>()
|
||||
where a.id == b.TestLinqToSqlId
|
||||
select new { a.id, bid = b.id }).ToList();
|
||||
Assert.True(t2.Any());
|
||||
//Assert.Equal(item.id, t2[0].id);
|
||||
//Assert.Equal(comment.id, t2[0].bid);
|
||||
|
||||
var t3 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||
from b in g.sqlite.Select<TestLinqToSqlComment>()
|
||||
where a.id == b.TestLinqToSqlId
|
||||
where a.id == item.id
|
||||
select new { a.id, bid = b.id }).ToList();
|
||||
Assert.True(t3.Any());
|
||||
Assert.Equal(item.id, t3[0].id);
|
||||
Assert.Equal(comment.id, t3[0].bid);
|
||||
}
|
||||
}
|
||||
}
|
@ -88,6 +88,18 @@ namespace FreeSql.Tests {
|
||||
|
||||
[Fact]
|
||||
public void Test1() {
|
||||
var linqto1 =
|
||||
from p in g.sqlite.Select<Order>()
|
||||
where p.Id >= 0
|
||||
// && p.OrderDetails.AsSelect().Where(c => c.Id > 10).Any()
|
||||
orderby p.Id descending
|
||||
orderby p.CustomerName ascending
|
||||
select new { Name = p.CustomerName, Length = p.Id };
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var testddd = new TestEntity {
|
||||
Test = 22,
|
||||
|
Reference in New Issue
Block a user