Skip to content

Commit 2234012

Browse files
committed
- 修复 MySql 子查询 Enum MapType(int) 表达式判断解析 bug;#1118
1 parent 0ea5c5d commit 2234012

File tree

3 files changed

+311
-1
lines changed

3 files changed

+311
-1
lines changed

FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml

Lines changed: 120 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
using FreeSql.DataAnnotations;
2+
using Newtonsoft.Json;
3+
using System;
4+
using System.ComponentModel;
5+
using Xunit;
6+
7+
namespace FreeSql.Tests.Issues
8+
{
9+
public class _1118
10+
{
11+
[Fact]
12+
public void PropertyType()
13+
{
14+
var fsql = g.mysql;
15+
16+
var activityPeopleCountList = fsql.Select<SalesmanActivityConfig>()
17+
.Where(a => a.SalesmanId == "xxx")
18+
.ToList(a => new
19+
{
20+
Type = a.Type,
21+
Count = fsql.Select<SalesmanActivityOrder>()
22+
.Where(o => o.SalesmanId == a.SalesmanId)
23+
.Where(o => a.Type == o.ActivityType)//报错ArgumentException: Requested value 'a.`Type`' was not found.
24+
//.Where("o.ActivityType = a.Type", null)//正常
25+
.Where(o => o.PayStatus == SalesmanActivityOrderPayStatusEnum.YiWanCheng)
26+
.Count(),
27+
});
28+
}
29+
30+
[JsonObject(MemberSerialization.OptIn), Table(Name = "salesman_activity_config")]
31+
public partial class SalesmanActivityConfig
32+
{
33+
/// <summary>
34+
///<para> </para>
35+
/// </summary>
36+
[JsonProperty, Column(Name = "Id", DbType = "char(32)", IsNullable = false, IsPrimary = true)]
37+
public string Id { get; set; }
38+
39+
/// <summary>
40+
///<para>推销员Id </para>
41+
/// </summary>
42+
[JsonProperty, Column(Name = "SalesmanId", DbType = "char(32)", IsNullable = false)]
43+
public string SalesmanId { get; set; }
44+
45+
/// <summary>
46+
///<para>洗车卡业务类型:0=自助卡 1=自动卡 2=通用卡[BaseCardBussinessType] </para>
47+
/// </summary>
48+
[JsonProperty, Column(Name = "Type", DbType = "int", IsNullable = false)]
49+
public BaseCardBussinessType Type { get; set; }
50+
51+
/// <summary>
52+
///<para>收益 </para>
53+
/// </summary>
54+
[JsonProperty, Column(Name = "DivideAmount", DbType = "decimal(10,2)", IsNullable = false)]
55+
public decimal DivideAmount { get; set; }
56+
57+
/// <summary>
58+
///<para> </para>
59+
/// </summary>
60+
[JsonProperty, Column(Name = "AddTime", DbType = "datetime", IsNullable = false)]
61+
public DateTime AddTime { get; set; }
62+
63+
/// <summary>
64+
///<para> </para>
65+
/// </summary>
66+
[JsonProperty, Column(Name = "UpdateTime", DbType = "datetime", IsNullable = true)]
67+
public DateTime? UpdateTime { get; set; }
68+
69+
}
70+
[JsonObject(MemberSerialization.OptIn), Table(Name = "salesman_activity_order")]
71+
public partial class SalesmanActivityOrder
72+
{
73+
/// <summary>
74+
///<para> </para>
75+
/// </summary>
76+
[JsonProperty, Column(Name = "Id", DbType = "char(32)", IsNullable = false, IsPrimary = true)]
77+
public string Id { get; set; }
78+
79+
/// <summary>
80+
///<para>推销员活动配置Id </para>
81+
/// </summary>
82+
[JsonProperty, Column(Name = "SalesmanActivityConfigId", DbType = "char(32)", IsNullable = false)]
83+
public string SalesmanActivityConfigId { get; set; }
84+
85+
/// <summary>
86+
///<para>洗车卡业务类型:0=自助卡 1=自动卡 2=通用卡[BaseCardBussinessType] </para>
87+
/// </summary>
88+
[JsonProperty, Column(Name = "ActivityType", DbType = "int", IsNullable = false)]
89+
public BaseCardBussinessType ActivityType { get; set; }
90+
91+
/// <summary>
92+
///<para>推销员Id </para>
93+
/// </summary>
94+
[JsonProperty, Column(Name = "SalesmanId", DbType = "char(32)", IsNullable = false)]
95+
public string SalesmanId { get; set; }
96+
97+
/// <summary>
98+
///<para>用户Id </para>
99+
/// </summary>
100+
[JsonProperty, Column(Name = "AccountId", DbType = "char(32)", IsNullable = false)]
101+
public string AccountId { get; set; }
102+
103+
/// <summary>
104+
///<para>订单编号 </para>
105+
/// </summary>
106+
[JsonProperty, Column(Name = "OrderNo", DbType = "varchar(100)", IsNullable = false)]
107+
public string OrderNo { get; set; }
108+
109+
/// <summary>
110+
///<para>支付金额 </para>
111+
/// </summary>
112+
[JsonProperty, Column(Name = "PayAmount", DbType = "decimal(10,2)", IsNullable = false)]
113+
public decimal PayAmount { get; set; }
114+
115+
/// <summary>
116+
///<para>支付方式 0、余额支付 1、微信支付 2、支付宝 99、无 </para>
117+
/// </summary>
118+
[JsonProperty, Column(Name = "PayMethod", DbType = "int", IsNullable = false)]
119+
public SalesmanActivityOrderPayMethodEnum PayMethod { get; set; }
120+
121+
/// <summary>
122+
///<para>支付状态:1、待付款,5、已完成,10、关闭,15、退款中,20、退款完成 </para>
123+
/// </summary>
124+
[JsonProperty, Column(Name = "PayStatus", DbType = "int", IsNullable = false)]
125+
public SalesmanActivityOrderPayStatusEnum PayStatus { get; set; }
126+
127+
/// <summary>
128+
///<para>支付时间 </para>
129+
/// </summary>
130+
[JsonProperty, Column(Name = "PayTime", DbType = "datetime", IsNullable = true)]
131+
public DateTime? PayTime { get; set; }
132+
133+
/// <summary>
134+
///<para>是否已激活 </para>
135+
/// </summary>
136+
[JsonProperty, Column(Name = "IsActivated", DbType = "bit(1)", IsNullable = false)]
137+
public bool IsActivated { get; set; }
138+
139+
/// <summary>
140+
///<para>激活时间 </para>
141+
/// </summary>
142+
[JsonProperty, Column(Name = "ActivatedTime", DbType = "datetime", IsNullable = true)]
143+
public DateTime? ActivatedTime { get; set; }
144+
145+
/// <summary>
146+
///<para>购买的365年卡Id </para>
147+
/// </summary>
148+
[JsonProperty, Column(Name = "CardOrderId", DbType = "char(32)", IsNullable = true)]
149+
public string CardOrderId { get; set; }
150+
151+
/// <summary>
152+
///<para> </para>
153+
/// </summary>
154+
[JsonProperty, Column(Name = "AddTime", DbType = "datetime", IsNullable = false)]
155+
public DateTime AddTime { get; set; }
156+
157+
/// <summary>
158+
///<para> </para>
159+
/// </summary>
160+
[JsonProperty, Column(Name = "UpdateTime", DbType = "datetime", IsNullable = true)]
161+
public DateTime? UpdateTime { get; set; }
162+
}
163+
164+
public enum SalesmanActivityOrderPayMethodEnum { Wepay, Alipay, Bank }
165+
public enum SalesmanActivityOrderPayStatusEnum { Pending, Compelte, YiWanCheng }
166+
public enum BaseCardBussinessType
167+
{
168+
/// <summary>
169+
/// 自助卡
170+
/// </summary>
171+
[Description("自助卡")]
172+
ZiZhuKa = 0,
173+
/// <summary>
174+
/// 自动卡
175+
/// </summary>
176+
[Description("自动卡")]
177+
ZiDongKa = 1,
178+
/// <summary>
179+
/// 通用卡
180+
/// </summary>
181+
[Description("通用卡")]
182+
TongYongKa = 2,
183+
}
184+
}
185+
186+
}

FreeSql/Internal/CommonExpression.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,11 @@ rightExp is UnaryExpression rightExpUexp &&
648648
{
649649
var enumType = leftMapColumn.CsType.NullableTypeOrThis();
650650
if (enumType.IsEnum)
651-
right = formatSql(Enum.Parse(enumType, right.StartsWith("N'") ? right.Substring(1).Trim('\'') : right.Trim('\'')), leftMapColumn.Attribute.MapType, leftMapColumn, tsc.dbParams);
651+
{
652+
rightMapColumn = SearchColumnByField(tsc._tables, tsc.currentTable, right);
653+
if (rightMapColumn != null)
654+
right = formatSql(Enum.Parse(enumType, right.StartsWith("N'") ? right.Substring(1).Trim('\'') : right.Trim('\'')), leftMapColumn.Attribute.MapType, leftMapColumn, tsc.dbParams);
655+
}
652656
}
653657
if (leftMapColumn == null)
654658
{

0 commit comments

Comments
 (0)