指定的强制转换在将int强制转换为byte时无效



我有一个名为AttachmentType的实体,它的属性ShowDuringRegistration为字节

在执行这一行时,我总是看到这样的错误:指定的强制转换无效,无论我发送一个字节作为参数

Repository<AttachmentType>.FindBySpecification(new AttachmentSearchSpecification()
    .WithTraceCodeOrNationalNumber(traceCodeString)
    .WithAttachmentTypeShowDuringRegistration(false))
    .Select(p=>new attachmentTypeModel()
     {
       Id=p.Id,
       Title=p.Title
     })
    .ToList();
 public AttachmentSearchSpecification WithAttachmentTypeShowDuringRegistration(bool showDuringRegistration=false)
 {          
      AddExpression(p => p.AttachmentType.ShowDuringRegistration == (showDuringRegistration ? 1 : 0));
      return this;
 }

即使我向WithAttachmentTypeShowDuringRegistration方法发送一个字节,并将ShowDuringregion与该属性进行比较,它也不起的作用

byte b=0;
Repository<AttachmentType>.FindBySpecification(new AttachmentSearchSpecification()
    .WithTraceCodeOrNationalNumber(traceCodeString)
    .WithAttachmentTypeShowDuringRegistration(b))
    .Select(p=> new attachmentTypeModel()
     {
       Id=p.Id,
       Title=p.Title
     })
    .ToList();
public AttachmentSearchSpecification WithAttachmentTypeShowDuringRegistration(byte showDuringRegistration)
{
    AddExpression(p => p.AttachmentType.ShowDuringRegistration == showDuringRegistration)
    return this;
}

当错误出现时:

select cast(count(*) as INT) 
as col_0_0_ from EmploymentRegistration.[Attachment]
attachment0_, EmploymentRegistration.[Demand] demand1_,
 EmploymentRegistration.[AttachmentType] attachment5_ where ttachment0_.DemandId=demand1_.DemandId 
 and demand1_.PersonId=person3_.PartyId and person3_.PartyId=birthcerti4_.PersonId and
 attachment0_.AttachmentTypeId=attachment5_.AttachmentTypeId 
 and (demand1_.TraceCode like ('%'+?+'%') or birthcerti4_.NationalNumber like ('%'+?+'%'))
 and   attachment5_.ShowDuringRegistration=?

内部异常:{"Specified cast is not valid."}

protected void AddExpression(Expression<Func<T, bool>> expression);  this method get an experssion and append that expression to the linq query 

 public class AttachmentTypeMap : ClassMap<AttachmentType>
{
    public AttachmentTypeMap()
    {
        Schema("EmploymentRegistration");
        Id(p => p.Id);//int identity
        Map(p => p.Title);//string
        Map(p => p.ShowDuringRegistration);//byte
        Map(p => p.ScriptName)
            .Length(100);
        References(p => p.EmploymentLicense);
    }
}`

通过执行这样一个更简单的查询:

 Repository<AttachmentType>.FindAll().Where(p=>p.ShowDuringRegistration==(byte)1).Tolist();

将像这样生成从中选择cast(count(*)as INT)as col_0_0_就业登记。[AttachmentType]attachment0_左外联接就业登记。【就业许可证】就业1_附件0_上。EmploymentLicenseId=employment1_。EmploymentLicenseId,其中
附件0_。ShowDuringRegistration=?

当我想知道返回值的数量时

int _totalItems = Query.Count();  //Query is IQueryable<T>

我会再次看到错误

即使只是执行这个查询,错误也会像以前一样出现:

//ShowDuringRegistration  is byte?
var data= Repository<AttachmentType>.Find(p => p.ShowDuringRegistration == 0)
                                    .ToList();
public interface IRepository<T> where T : class
{
   IQueryable<T> Find();
    IQueryable<T> Find(object id);
    IQueryable<T> FindBySpecification(ISpecification<T> specification);
    IQueryable<T> Find(Expression<Func<T, bool>> expression);
}

 public static class Repository<T> where T : class
{
private static IRepository<T> Current
    {
        get { return UnitOfWork.GetRepository<T>(); }
    }
 public static IQueryable<T> Find(Expression<Func<T, bool>> expression)
    {
        return Current.Find(expression);
    }
 public static IList<T> FindAll(Expression<Func<T, bool>> expression)
    {
        return Current.FindAll(expression);
    }
}

您实际上并没有使用字节,而是使用了int。它通常在C#中工作,因为ShowDuringRegistration将被提升为int,然后进行比较。试试这个:

public AttachmentSearchSpecification WithAttachmentTypeShowDuringRegistration
    (bool showDuringRegistration=false)
{
    byte value = showDuringRegistration ? (byte) 1 : (byte) 0;
    AddExpression(p => p.AttachmentType.ShowDuringRegistration == value);
    return this;
}

相关内容

  • 没有找到相关文章

最新更新