mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
- 补充 实现表达式转换类型的解析,如:Select<object>().Where(a => (a as 实体类型).Id == 0);
- 完善 ExpressionTree 基础数据类型 TryParse 使用与单元测试; - 优化 ManyToMany 中间实体未配置主键时,自动配置联合主键; - 修复 Expression.And 的使用问题;
This commit is contained in:
@ -13,6 +13,38 @@ using System.Linq.Expressions;
|
||||
namespace FreeSql.ExpressionTree {
|
||||
public class GetDataReaderValueBlockExpressionTest {
|
||||
|
||||
[Fact]
|
||||
public void Guid2() {
|
||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.Empty));
|
||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid), Guid.Empty));
|
||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.NewGuid()));
|
||||
var newguid = Guid.NewGuid();
|
||||
Assert.Equal(newguid, Utils.GetDataReaderValue(typeof(Guid), newguid));
|
||||
var exp3 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(null));
|
||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid), null));
|
||||
|
||||
var exp11 = Utils.GetDataReaderValueBlockExpression(typeof(Guid?), Expression.Constant(Guid.Empty));
|
||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid?), Guid.Empty));
|
||||
var exp22 = Utils.GetDataReaderValueBlockExpression(typeof(Guid?), Expression.Constant(newguid));
|
||||
Assert.Equal(newguid, Utils.GetDataReaderValue(typeof(Guid?), newguid));
|
||||
var exp33 = Utils.GetDataReaderValueBlockExpression(typeof(Guid?), Expression.Constant(null));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(Guid?), null));
|
||||
|
||||
var exp111 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.Empty.ToString()));
|
||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid), Guid.Empty.ToString()));
|
||||
var exp222 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(newguid.ToString()));
|
||||
Assert.Equal(newguid, Utils.GetDataReaderValue(typeof(Guid), newguid.ToString()));
|
||||
var exp333 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant("-1"));
|
||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid), "-1"));
|
||||
|
||||
var exp1111 = Utils.GetDataReaderValueBlockExpression(typeof(Guid?), Expression.Constant(Guid.Empty.ToString()));
|
||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid?), Guid.Empty.ToString()));
|
||||
var exp2222 = Utils.GetDataReaderValueBlockExpression(typeof(Guid?), Expression.Constant(newguid.ToString()));
|
||||
Assert.Equal(newguid, Utils.GetDataReaderValue(typeof(Guid?), newguid.ToString()));
|
||||
var exp3333 = Utils.GetDataReaderValueBlockExpression(typeof(Guid?), Expression.Constant("-1"));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(Guid?), "-1"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Boolean() {
|
||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(bool), Expression.Constant(true));
|
||||
@ -342,5 +374,59 @@ namespace FreeSql.ExpressionTree {
|
||||
var exp2222 = Utils.GetDataReaderValueBlockExpression(typeof(decimal?), Expression.Constant("aaa"));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(decimal?), "aaa"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DateTime2() {
|
||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(DateTime.MinValue));
|
||||
Assert.Equal(DateTime.MinValue, Utils.GetDataReaderValue(typeof(DateTime), DateTime.MinValue));
|
||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(DateTime.MaxValue));
|
||||
Assert.Equal(DateTime.MaxValue, Utils.GetDataReaderValue(typeof(DateTime), DateTime.MaxValue));
|
||||
var exp3 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant("2000-1-1"));
|
||||
Assert.Equal(DateTime.Parse("2000-1-1"), Utils.GetDataReaderValue(typeof(DateTime), "2000-1-1"));
|
||||
|
||||
var exp11 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime?), Expression.Constant(DateTime.MinValue));
|
||||
Assert.Equal(DateTime.MinValue, Utils.GetDataReaderValue(typeof(DateTime?), DateTime.MinValue));
|
||||
var exp22 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime?), Expression.Constant(DateTime.MaxValue));
|
||||
Assert.Equal(DateTime.MaxValue, Utils.GetDataReaderValue(typeof(DateTime?), DateTime.MaxValue));
|
||||
var exp33 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime?), Expression.Constant("2000-1-1"));
|
||||
Assert.Equal(DateTime.Parse("2000-1-1"), Utils.GetDataReaderValue(typeof(DateTime?), "2000-1-1"));
|
||||
|
||||
var exp111 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(null));
|
||||
Assert.Equal(default(DateTime), Utils.GetDataReaderValue(typeof(DateTime), null));
|
||||
var exp222 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant("aaa"));
|
||||
Assert.Equal(default(DateTime), Utils.GetDataReaderValue(typeof(DateTime), "aaa"));
|
||||
|
||||
var exp1111 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime?), Expression.Constant(null));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(DateTime?), null));
|
||||
var exp2222 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime?), Expression.Constant("aaa"));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(DateTime?), "aaa"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DateTimeOffset2() {
|
||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(DateTimeOffset.MinValue));
|
||||
Assert.Equal(DateTimeOffset.MinValue, Utils.GetDataReaderValue(typeof(DateTimeOffset), DateTimeOffset.MinValue));
|
||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(DateTimeOffset.MaxValue));
|
||||
Assert.Equal(DateTimeOffset.MaxValue, Utils.GetDataReaderValue(typeof(DateTimeOffset), DateTimeOffset.MaxValue));
|
||||
var exp3 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant("2000-1-1"));
|
||||
Assert.Equal(DateTimeOffset.Parse("2000-1-1"), Utils.GetDataReaderValue(typeof(DateTimeOffset), "2000-1-1"));
|
||||
|
||||
var exp11 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset?), Expression.Constant(DateTimeOffset.MinValue));
|
||||
Assert.Equal(DateTimeOffset.MinValue, Utils.GetDataReaderValue(typeof(DateTimeOffset?), DateTimeOffset.MinValue));
|
||||
var exp22 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset?), Expression.Constant(DateTimeOffset.MaxValue));
|
||||
Assert.Equal(DateTimeOffset.MaxValue, Utils.GetDataReaderValue(typeof(DateTimeOffset?), DateTimeOffset.MaxValue));
|
||||
var exp33 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset?), Expression.Constant("2000-1-1"));
|
||||
Assert.Equal(DateTimeOffset.Parse("2000-1-1"), Utils.GetDataReaderValue(typeof(DateTimeOffset?), "2000-1-1"));
|
||||
|
||||
var exp111 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(null));
|
||||
Assert.Equal(default(DateTimeOffset), Utils.GetDataReaderValue(typeof(DateTimeOffset), null));
|
||||
var exp222 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant("aaa"));
|
||||
Assert.Equal(default(DateTimeOffset), Utils.GetDataReaderValue(typeof(DateTimeOffset), "aaa"));
|
||||
|
||||
var exp1111 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset?), Expression.Constant(null));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(DateTimeOffset?), null));
|
||||
var exp2222 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset?), Expression.Constant("aaa"));
|
||||
Assert.Null(Utils.GetDataReaderValue(typeof(DateTimeOffset?), "aaa"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -126,19 +126,36 @@ namespace FreeSql.Tests.Sqlite {
|
||||
public int id { get; set; }
|
||||
public string name { get; set; } //这是join表的属性
|
||||
public int ParentId { get; set; } //这是join表的属性
|
||||
|
||||
public bool? testBool1 { get; set; }
|
||||
public bool? testBool2 { get; set; }
|
||||
}
|
||||
class TestDtoLeftJoin {
|
||||
[Column(IsPrimary = true)]
|
||||
public int Guid { get; set; }
|
||||
public bool? testBool1 { get; set; }
|
||||
public bool? testBool2 { get; set; }
|
||||
}
|
||||
[Fact]
|
||||
public void ToList() {
|
||||
|
||||
g.sqlite.Delete<TestDtoLeftJoin>().Where("1=1").ExecuteAffrows();
|
||||
var testlist = select.Limit(10).ToList();
|
||||
foreach(var testitem in testlist) {
|
||||
var testdtolj = new TestDtoLeftJoin { Guid = testitem.TypeGuid, testBool1 = true };
|
||||
if (g.sqlite.Select<TestDtoLeftJoin>().Where(a => a.Guid == testitem.TypeGuid).Any() == false)
|
||||
g.sqlite.Insert<TestDtoLeftJoin>(testdtolj).ExecuteAffrows();
|
||||
}
|
||||
|
||||
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 { });
|
||||
var testDto4 = select.Limit(10).ToList(a => new TestDto() { });
|
||||
|
||||
var testDto11 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
||||
var testDto22 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto());
|
||||
var testDto33 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto { });
|
||||
var testDto44 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto() { });
|
||||
var testDto11 = select.LeftJoin<TestDtoLeftJoin>((a,b) => b.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
||||
var testDto22 = select.LeftJoin<TestDtoLeftJoin>((a, b) => b.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto());
|
||||
var testDto33 = select.LeftJoin<TestDtoLeftJoin>((a, b) => b.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto { });
|
||||
var testDto44 = select.LeftJoin<TestDtoLeftJoin>((a, b) => b.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto() { });
|
||||
|
||||
g.sqlite.Insert<TestGuidIdToList>().AppendData(new TestGuidIdToList()).ExecuteAffrows();
|
||||
var testGuidId5 = g.sqlite.Select<TestGuidIdToList>().ToList();
|
||||
|
Reference in New Issue
Block a user