Skip to content

Commit 3d80bc0

Browse files
2881028810
authored andcommitted
- 修复 [JsonMap] 属性在 lambda 表达式中解析的 bug;
1 parent f1e144d commit 3d80bc0

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

Examples/base_entity/Program.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,11 @@ static void Main(string[] args)
141141
new S_SysConfig<TestConfig> { Name = "testkey22", Config = new TestConfig { clicks = 22, title = "testtitle22" }, Config2 = new TestConfig { clicks = 11, title = "testtitle11" } }.Save();
142142
new S_SysConfig<TestConfig> { Name = "testkey33", Config = new TestConfig { clicks = 33, title = "testtitle33" }, Config2 = new TestConfig { clicks = 11, title = "testtitle11" } }.Save();
143143
var testconfigs11 = S_SysConfig<TestConfig>.Select.ToList();
144+
var testconfigs111 = S_SysConfig<TestConfig>.Select.ToList(a => a.Name);
145+
var testconfigs112 = S_SysConfig<TestConfig>.Select.ToList(a => a.Config);
146+
var testconfigs1122 = S_SysConfig<TestConfig>.Select.ToList(a => new { a.Name, a.Config });
147+
var testconfigs113 = S_SysConfig<TestConfig>.Select.ToList(a => a.Config2);
148+
var testconfigs1133 = S_SysConfig<TestConfig>.Select.ToList(a => new { a.Name, a.Config2 });
144149

145150
var repo = BaseEntity.Orm.Select<TestConfig>().Limit(10).ToList();
146151

FreeSql/Internal/CommonExpression.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,15 @@ public bool ReadAnonymousField(List<SelectTableInfo> _tables, StringBuilder fiel
8080
return false;
8181
case ExpressionType.Parameter:
8282
case ExpressionType.MemberAccess:
83-
if (_common.GetTableByEntity(exp.Type) != null)
84-
{ //加载表所有字段
83+
if (_common.GetTableByEntity(exp.Type) != null &&
84+
//判断 [JsonMap] 并非导航对象
85+
(exp.NodeType == ExpressionType.Parameter || exp is MemberExpression expMem && (
86+
_common.GetTableByEntity(expMem.Expression.Type)?.ColumnsByCs.ContainsKey(expMem.Member.Name) == false ||
87+
expMem.Expression.NodeType == ExpressionType.Parameter && expMem.Expression.Type.IsAnonymousType()) //<>h__TransparentIdentifier 是 Linq To Sql 的类型判断,此时为匿名类型
88+
)
89+
)
90+
{
91+
//加载表所有字段
8592
var map = new List<SelectColumnInfo>();
8693
ExpressionSelectColumn_MemberAccess(_tables, map, SelectTableInfoType.From, exp, true, getSelectGroupingMapString);
8794
var tb = parent.Table = map.First().Table.Table;
@@ -1272,9 +1279,24 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
12721279

12731280
var exp2Type = exp2.Type;
12741281
if (exp2Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) exp2Type = exp2Type.GetGenericArguments().LastOrDefault() ?? exp2.Type;
1275-
var tb2tmp = _common.GetTableByEntity(exp2Type);
12761282
var mp2 = exp2 as MemberExpression;
12771283
if (mp2?.Member.Name == "Key" && mp2.Expression.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) continue;
1284+
1285+
ColumnInfo col2 = null;
1286+
if (tb2?.ColumnsByCs.TryGetValue(mp2.Member.Name, out col2) == true)
1287+
{
1288+
if (tsc._selectColumnMap != null && find2 != null)
1289+
{
1290+
tsc._selectColumnMap.Add(new SelectColumnInfo { Table = find2, Column = col2 });
1291+
return "";
1292+
}
1293+
name2 = col2.Attribute.Name;
1294+
tsc.SetMapColumnTmp(col2);
1295+
break;
1296+
}
1297+
//判断 [JsonMap] 并非导航对象,所以在上面提前判断 ColumnsByCs
1298+
1299+
var tb2tmp = _common.GetTableByEntity(exp2Type);
12781300
if (tb2tmp != null)
12791301
{
12801302
if (exp2.NodeType == ExpressionType.Parameter)
@@ -1317,7 +1339,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
13171339
throw new ArgumentException($"{tb2.DbName}.{mp2.Member.Name} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2.Member.Name}) 中使用,请移步参考 IncludeMany 文档。");
13181340
throw new ArgumentException($"{tb2.DbName} 找不到列 {mp2.Member.Name}");
13191341
}
1320-
var col2 = tb2.ColumnsByCs[mp2.Member.Name];
1342+
col2 = tb2.ColumnsByCs[mp2.Member.Name];
13211343
if (tsc._selectColumnMap != null && find2 != null)
13221344
{
13231345
tsc._selectColumnMap.Add(new SelectColumnInfo { Table = find2, Column = col2 });

0 commit comments

Comments
 (0)