- 增加 Pgsql JToken/JObject/JArray 索引访问的表达式解析;

- 增加 object.Equals 表达式解析;
This commit is contained in:
28810 2020-03-19 22:46:40 +08:00
parent 5f166c08aa
commit a5e6573851
5 changed files with 50 additions and 49 deletions

View File

@ -369,7 +369,7 @@ namespace FreeSql.Tests.PostgreSQL
var item3NP = insert.AppendData(item2).NoneParameter().ExecuteInserted();
var item3 = insert.AppendData(item2).ExecuteInserted().First();
var newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
var newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
var items = select.ToList();
}

View File

@ -963,6 +963,15 @@ WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title]
a.Id,
a.Clicks
});
var testUnionAll = select
.WithSql("SELECT * FROM [tb_topic22] where id = 10")
.WithSql("SELECT * FROM [tb_topic22] where id = 11")
.ToSql(a => new
{
a.Id,
a.Clicks
});
}
public class TestInclude_OneToManyModel1

View File

@ -2961,6 +2961,40 @@
<param name="end"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExpressionCall.Contains``2(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,``1}},``0,``1)">
<summary>
C#:从元组集合中查找 exp1, exp2 是否存在<para></para>
SQL <para></para>
exp1 = that[0].Item1 and exp2 = that[0].Item2 OR <para></para>
exp1 = that[1].Item1 and exp2 = that[1].Item2 OR <para></para>
... <para></para>
注意:当 that 为 null 或 empty 时,返回 1=0
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<param name="that"></param>
<param name="exp1"></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExpressionCall.Contains``3(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,``1,``2}},``0,``1,``2)">
<summary>
C#:从元组集合中查找 exp1, exp2, exp2 是否存在<para></para>
SQL <para></para>
exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR <para></para>
exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR <para></para>
... <para></para>
注意:当 that 为 null 或 empty 时,返回 1=0
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<typeparam name="T3"></typeparam>
<param name="that"></param>
<param name="exp1"></param>
<param name="exp2"></param>
<param name="exp3"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExtensions.Distance(System.Drawing.Point,System.Drawing.Point)">
<summary>
测量两个经纬度的距离,返回单位:米
@ -3234,49 +3268,3 @@
</member>
</members>
</doc>
Œå®Œæˆ<EFBFBD>(å<EFBFBD>¯èƒ½ï¼‰è¢«å…¶ä»çº¿ç¨äºåŠ¡è‡ªåŠ¨æ<EFBFBD><EFBFBD>交
</summary>
<param name="handler">事务体 () => {}</param>
</member>
<member name="M:IFreeSql.Transaction(System.TimeSpan,System.Action)">
<summary>
å¼€å<E282AC>¯äºåŠ¡ï¼ˆä¸<C3A4>支æŒ<C3A6>弿­¥ï¼‰
</summary>
<param name="timeout">超时,未执行完æˆ<EFBFBD>(å<EFBFBD>¯èƒ½ï¼‰è¢«å…¶ä»çº¿ç¨äºåŠ¡è‡ªåŠ¨æ<EFBFBD><EFBFBD>交</param>
<param name="handler">事务体 () => {}</param>
</member>
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.TimeSpan,System.Action)">
<summary>
å¼€å<E282AC>¯äºåŠ¡ï¼ˆä¸<C3A4>支æŒ<C3A6>弿­¥ï¼‰
</summary>
<param name="isolationLevel"></param>
<param name="handler">事务体 () => {}</param>
<param name="timeout">超时,未执行完æˆ<EFBFBD>(å<EFBFBD>¯èƒ½ï¼‰è¢«å…¶ä»çº¿ç¨äºåŠ¡è‡ªåŠ¨æ<EFBFBD><EFBFBD>交</param>
</member>
<member name="P:IFreeSql.Ado">
<summary>
æ•°æ<C2B0>®åº“访问对象
</summary>
</member>
<member name="P:IFreeSql.Aop">
<summary>
所有拦截方法都在这里
</summary>
</member>
<member name="P:IFreeSql.CodeFirst">
<summary>
CodeFirst 模å¼<C3A5>å¼€å<E282AC>ç¸å…³æ¹æ³•
</summary>
</member>
<member name="P:IFreeSql.DbFirst">
<summary>
DbFirst 模å¼<C3A5>å¼€å<E282AC>ç¸å…³æ¹æ³•
</summary>
</member>
<member name="P:IFreeSql.GlobalFilter">
<summary>
全局过滤设置,å<C592>¯é»˜è®¤é™„加为 Select/Update/Delete æ<>¡ä»¶
</summary>
</member>
</members>
</doc>

View File

@ -675,8 +675,11 @@ namespace FreeSql.Internal
case "System.Convert": other3Exp = ExpressionLambdaToSqlCallConvert(exp3, tsc); break;
}
if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp;
if (exp3.Method.Name == "Equals" && exp3.Object != null && exp3.Arguments.Count > 0)
return ExpressionBinary("=", exp3.Object, exp3.Arguments[0], tsc);
if (exp3.Method.Name == "Equals")
{
if (exp3.Arguments.Count > 0 && exp3.Object != null) return ExpressionBinary("=", exp3.Object, exp3.Arguments[0], tsc);
if (exp3.Arguments.Count > 1 && exp3.Method.DeclaringType == typeof(object)) return ExpressionBinary("=", exp3.Arguments[0], exp3.Arguments[1], tsc);
}
if (callType.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`"))
{
//if (exp3.Type == typeof(string) && exp3.Arguments.Any() && exp3.Arguments[0].NodeType == ExpressionType.Constant) {

View File

@ -115,6 +115,7 @@ namespace FreeSql.PostgreSQL
left = objExp == null ? null : getExp(objExp);
switch (callExp.Method.Name)
{
case "get_Item": return $"{left}->{getExp(callExp.Arguments[argIndex])}";
case "Any": return $"(jsonb_array_length(coalesce({left},'[]')) > 0)";
case "Contains":
var json = getExp(callExp.Arguments[argIndex]);