System.Reflection.AmbiguousMatchException: 发现不明确的匹配。 返回

SqlSugar 沟通中
5 219

1、版本5.1.4.205,数据库sqlite,开发语言.net

2、表结构

CREATE TABLE "order_sum"(
"id" bigint NOT NULL PRIMARY KEY ,
"vin_num" integer NOT NULL  ,
"tire_num" integer NOT NULL  ,
"sort_no" varchar(64) NOT NULL  ,
"status" integer NOT NULL  ,
"create_time" datetime NOT NULL  ,
"update_time" datetime NULL  ,
"is_delete" bit NOT NULL    );

CREATE UNIQUE INDEX index_order_sum_S ON `order_sum`(`sort_no` Desc);

3、基类

using SqlSugar;
using System;

namespace Comm.DbBase
{
    public abstract class EntityBaseId
    {
        /// <summary>
        /// 雪花Id
        /// </summary>
        [SugarColumn(ColumnName = "id", ColumnDescription = "主键Id", IsPrimaryKey = true, IsIdentity = false)]
        public virtual long Id { get; set; }
    }
    public abstract class EntityBase : EntityBaseId, IDeletedFilter
    {
        /// <summary>
        /// 创建时间
        /// </summary>
        [SugarColumn(ColumnDescription = "创建时间", ColumnName="create_time", IsNullable = false, IsOnlyIgnoreUpdate = true)]
        public virtual DateTime? CreateTime { get; set; }

        /// <summary>
        /// 更新时间
        /// </summary>
        [SugarColumn(ColumnDescription = "更新时间", ColumnName="update_time", IsNullable = true, IsOnlyIgnoreInsert = true, UpdateServerTime = true)]
        public virtual DateTime? UpdateTime { get; set; }

        /// <summary>
        /// 软删除
        /// </summary>
        [SugarColumn(ColumnDescription = "软删除", ColumnName = "is_delete")]
        public virtual bool IsDelete { get; set; } = false;
    }
}

4、实体类

using Comm.DbBase;
using orderSort.comm;
using SqlSugar;

namespace orderSort.order.model
{
    [SugarTable("order_sum")]
    [SugarIndex("index_{table}_S", nameof(SortNo), OrderByType.Desc, true)]
    public class OrderSum : EntityBase
    {
        [SugarColumn(ColumnDescription = "车辆总数",ColumnName ="vin_num")]
        public int VinNum { get; set; }

        [SugarColumn(ColumnDescription = "轮胎总数", ColumnName ="tire_num")]
        public int TireNum { get; set; }

        [SugarColumn(ColumnDescription = "排序单号", ColumnName = "sort_no", IsNullable = false, Length = 64)]
        public string SortNo { get; set; }

        [SugarColumn(ColumnDescription = "状态", ColumnName = "status")]
        public StatusEnum OrderStatus { get; set; }
    }
}

5、使用

OrderSum orderSum = _sumService.AsQueryable()
    .Where(it => it.SortNo==sortNo && it.IsDelete == false)
    .First();

6、异常

 An object implementing IHandleObservableErrors (often a ReactiveCommand or ObservableAsPropertyHelper) has errored, thereby breaking its observable pipeline. To prevent this, ensure the pipeline does not error, or Subscribe to the ThrownExceptions property of the object in question to handle the erroneous case. ---> System.Reflection.AmbiguousMatchException: 发现不明确的匹配。
   在 System.RuntimeType.GetField(String name, BindingFlags bindingAttr)
   在 SqlSugar.ExpressionTool.GetMemberValue(MemberInfo member, Expression expression)
   在 SqlSugar.MemberConstExpressionResolve..ctor(ExpressionParameter parameter)
   在 SqlSugar.BaseResolve.Start()
   在 SqlSugar.MethodCallExpressionResolve.AppendModel(ExpressionParameter parameter, MethodCallExpressionModel model, Expression item, String name, IEnumerable`1 args)
   在 SqlSugar.MethodCallExpressionResolve.AppendItem(ExpressionParameter parameter, String name, IEnumerable`1 args, MethodCallExpressionModel model, Expression item)
   在 SqlSugar.MethodCallExpressionResolve.Where(ExpressionParameter parameter, Nullable`1 isLeft, String name, IEnumerable`1 args, MethodCallExpressionModel model, List`1 appendArgs)
   在 SqlSugar.MethodCallExpressionResolve.NativeExtensionMethod(ExpressionParameter parameter, MethodCallExpression express, Nullable`1 isLeft, String name, List`1 appendArgs)
   在 SqlSugar.MethodCallExpressionResolve..ctor(ExpressionParameter parameter)
   在 SqlSugar.BaseResolve.Start()
   在 SqlSugar.BinaryExpressionResolve.Left(BinaryExpression expression, Expression leftExpression)
   在 SqlSugar.BinaryExpressionResolve.DefaultBinary(ExpressionParameter parameter, BinaryExpression expression, String operatorValue)
   在 SqlSugar.BinaryExpressionResolve.Other(ExpressionParameter parameter)
   在 SqlSugar.BinaryExpressionResolve..ctor(ExpressionParameter parameter)
   在 SqlSugar.BaseResolve.Start()
   在 SqlSugar.LambdaExpressionResolve..ctor(ExpressionParameter parameter)
   在 SqlSugar.BaseResolve.Start()
   在 SqlSugar.ExpressionContext.Resolve(Expression expression, ResolveExpressType resolveType)
   在 SqlSugar.QueryBuilder.GetExpressionValue(Expression expression, ResolveExpressType resolveType)
   在 SqlSugar.QueryableProvider`1._Where(Expression expression)
   在 SqlSugar.QueryableProvider`1.Where(Expression`1 expression)
   在 orderSort.order.viewModel.ConfigControlViewModel. ()
   在 orderSort.comm.OrgcCommand. . ()
   在 ReactiveUI.ReactiveCommand.<>c__DisplayClass0_0.<Create>b__1(IObserver`1 observer) 位置 /_/src/ReactiveUI/ReactiveCommand/ReactiveCommand.cs:行号 86
   在 System.Reactive.Linq.QueryLanguage.CreateWithDisposableObservable`1.SubscribeCore(IObserver`1 observer)
   在 System.Reactive.ObservableBase`1.Subscribe(IObserver`1 observer)
   --- 内部异常堆栈跟踪的结尾 ---
   在 ReactiveUI.RxApp.<>c__DisplayClass9_0.<.cctor>b__2() 位置 /_/src/ReactiveUI/RxApp.cs:行号 105
   在 System.Reactive.Concurrency.Scheduler.Invoke(Action action)
   在 System.Reactive.Concurrency.DispatcherScheduler.<>c__DisplayClass12_0`1.<Schedule>b__0()
   在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

7、补充,如果传入一个常量字符串,不是变量,就没问题,传变量就会异常

OrderSum orderSum = _sumService.AsQueryable()
    .Where(it => it.SortNo=="123" && it.IsDelete == false)
    .First();


热忱回答5

  • fate sta fate sta VIP0
    1个月前

    提供完整可以重现的DEMO,删 掉OBJ和BIN打包上传

    0 回复
  • fate sta fate sta VIP0
    1个月前
    var p=sortNo ;
    //在传入P试试。或者这个sortNo比较特殊。

    如果还不能解决就需要提供完整DEMO

    0 回复
  • 悟空 悟空 VIP0
    1个月前

    @fate sta:我把传入的 sortno  又重新new了一个对象 使用new对象传入值,就没问题,改成这样传值就是ok的

    string sortNo = "1051RLN25101501289";
    OrderSum sum = new OrderSum { SortNo = sortNo };
    OrderSum orderSum = _sumService.GetFirst(ls => ls.SortNo == sum.SortNo);


    0 回复
  • fate sta fate sta VIP0
    1个月前

    有疑问提供DEMO

    0 回复
  • fate sta fate sta VIP0
    1个月前

    这种特殊类没有DEMO我没办法重现

    0 回复