• 【C#技术】一篇文章搞掂:LLBL


    公司代码速查

    ParameterBase.CurrentUser.UserId
    ICustomerDeskDetailManager customerDeskDetailManager = ClientProxyFactory.CreateProxyInstance<ICustomerDeskDetailManager>();

    使用主键查询一个实体

    CustomerEntity _Customer = new CustomerEntity(CustomerNo);
    DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter();
    {
        bool found = adapter.FetchEntity(_Customer, prefetchPath, null, fieldList);
        if (!found) throw new Foundation.Common.RecordNotFoundException(CustomerNo, "Invalid customer");
    }
    return _Customer;

    根据条件查找实体集

    EntityCollection CustomerCollection = new EntityCollection(new CustomerEntityFactory());
    using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
    {
        adapter.FetchEntityCollection(CustomerCollection, filterBucket, 0, sortExpression, prefetchPath, fieldList);
    }
    return CustomerCollection;

    实体集内存过滤

    EntityView2<SalesOrderDetailEntity> orderDetail = new EntityView2<SalesOrderDetailEntity>(salesOrder.SalesOrderDetails);
    ISortExpression sorter = new SortExpression(SalesOrderDetailFields.EntryNo | SortOperator.Ascending);
    orderDetail.Sorter = sorter;

    保存实体

    using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
    {
        try
        {
            adapter.StartTransaction(IsolationLevel.ReadCommitted, "SaveCustomerGroup");
            adapter.SaveEntity(CustomerGroup, true, false);
            adapter.Commit();
        }
        catch
        {
            adapter.Rollback();
            throw;
        }
    }
    return CustomerGroup;

    删除实体

    using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
    {
        try
        {
            adapter.StartTransaction(IsolationLevel.ReadCommitted, "DeleteCustomerGroup");
            adapter.DeleteEntity(CustomerGroup);
            adapter.Commit();
        }
        catch
        {
            adapter.Rollback();
            throw;
        }
    }

    Count(*)写法

    using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
    {
        if (filterBucket == null)
            filterBucket = new RelationPredicateBucket();
        return (int)adapter.GetScalar(CustomerGroupFields.CustomerGroup, null, AggregateFunction.Count, filterBucket.PredicateExpression);
    }

    过滤条件写法

    IRelationPredicateBucket bucket = new RelationPredicateBucket();
    bucket.PredicateExpression.Add(CustomerDeskDetailFields.DeskName == list[0].SysDeskName);

    判断是否为空

    bucket.PredicateExpression.Add(JobOrderMaterialPickDetailFields.SourceEntryNo == DBNull.Value);

    关联过滤

    //系统有外键,直接调用
    bucket.Relations.Add(InventoryMovementEntity.Relations.InventoryMovementDetailEntityUsingRefNo);
    //系统无外键,通过这种方式创建;JoinHint与写的顺序相反
    bucket.Relations.Add(new EntityRelation(ItemFields.ItemNo, InventoryMovementDetailFields.ItemNo, RelationType.OneToMany), JoinHint.Left);

    使用别名关联

    //主实体必须放在后面
    bucket.Relations.Add(new EntityRelation(LocationFields.Loc,JobOrderMaterialPickFields.LocFrom, RelationType.OneToMany),"LocFrom", JoinHint.Left);

    多键关联

    IEntityRelation mulKeyRelation = new EntityRelation(JobOrderMaterialPickDetailFields.SourceRefNo, PurchaseOrderDetailFields.OrderNo, RelationType.ManyToOne);
    mulKeyRelation.AddEntityFieldPair(JobOrderMaterialPickDetailFields.SourceEntryNo, PurchaseOrderDetailFields.EntryNo);
    bucket.Relations.Add(mulKeyRelation, JoinHint.Right);//系统无外键,通过这种方式创建

    在结果集中搜索

    List<int> ids = customerDeskCollection.FindMatches(CustomerDeskDetailFields.TableName == item.TableName);

    搜索出新的结果集

    IPredicate filterBucket1 = (GcBomAmendmentFields.Change == true);
    sortExpression = new SortExpression();
    sortExpression.Add(GcBomAmendmentFields.EntryNo | SortOperator.Ascending);
    EntityView2<GcBomAmendmentEntity> entityView1 = new EntityView2<GcBomAmendmentEntity>(collection);
    entityView1.Filter = filterBucket1;
    entityView1.Sorter = sortExpression;
    EntityCollection<GcBomAmendmentEntity> changeCollection = (EntityCollection<GcBomAmendmentEntity>)entityView1.ToEntityCollection();

    关联读取实体

    IPrefetchPath2 prefetchPath = new PrefetchPath2((int)EntityType.PurchaseOrderEntity);
    IPrefetchPathElement2 element = prefetchPath.Add(PurchaseOrderEntity.PrefetchPathPurchaseOrderDetails);
    element.SubPath.Add(PurchaseOrderDetailEntity.PrefetchPathPurchaseOrderBomDetails);

    排序条件

    ISortExpression sortExpression = new SortExpression();
    sortExpression.Add(CustomerDeskFields.SortNo | SortOperator.Ascending);

    复杂的公式(ISNULL(QtyReceipt,0)>ISNULL(QtyCosting,0))

    DbFunctionCall dbFunQtyReceipt = new DbFunctionCall("ISNULL", new object[] { (PurchaseReceiptsDetailFields.QtyReceipt), 0 });
    DbFunctionCall dbFunQtyCosting = new DbFunctionCall("ISNULL", new object[] { (PurchaseReceiptsDetailFields.QtyCosting), 0 });
    EntityField2 eQtyReceipt = new EntityField2("QtyReceipt", dbFunQtyReceipt);
    EntityField2 eQtyCosting = new EntityField2("QtyCosting", dbFunQtyCosting);
    bucketInspection.PredicateExpression.Add(new FieldCompareExpressionPredicate(eQtyReceipt, null, ComparisonOperator.GreaterThan, new Expression(eQtyCosting)));

    复杂的公式(SUM(ISNULL(eQtyOnHand,0)-ISNULL(QtyReserved,0)))

    DbFunctionCall dbFunQtyOnHand = new DbFunctionCall("ISNULL", new object[] { (InventoryBalanceFields.QtyOnHand), 0 });
    DbFunctionCall dbFunQtyReserved = new DbFunctionCall("ISNULL", new object[] { (InventoryBalanceFields.QtyReserved), 0 });
    EntityField2 eQtyOnHand = new EntityField2("QtyOnHand", dbFunQtyOnHand);
    EntityField2 eQtyReserved = new EntityField2("QtyReserved", dbFunQtyReserved);
    IExpression expression = new Expression(eQtyOnHand, ExOp.Sub, eQtyReserved);
    object qtyBalance = adapter.GetScalar(InventoryBalanceFields.QtyOnHand.SetExpression(expression), null, AggregateFunction.Sum, filterBucket.PredicateExpression);
    qtyBalance == DBNull.Value ? 0 : (decimal)qtyBalance;

    保存时不验证

    entity.Validator = null;
    adapter.SaveEntity(entity, true, false);

    选择读取的列

    ExcludeIncludeFieldsList fields = new ExcludeIncludeFieldsList(false);
    fields.Add(FiscalPeriodFields.EndDate);

    自定义读取表数据

    ResultsetFields fields = new ResultsetFields(4);
    fields.DefineField(InventoryMovementFields.RefNo, 0);
    fields.DefineField(InventoryMovementFields.LocFrom, 1);
    fields.DefineField(ProductionInspectionFields.JobNo, 3, "InspectionJobNo");//关联表的数据,以及创建别名
    //获取
    IUserDefinedQueryManager userDefinedQueryManager = ClientProxyFactory.CreateProxyInstance<IUserDefinedQueryManager>();
    _productionIssueTable = userDefinedQueryManager.GetQueryResult(fields, bucket, sortExpression, null, true, 0, false);

    直接删除 Delete From A Where

    IRelationPredicateBucket bucket = new RelationPredicateBucket((CustomerFields.CustomerID == "FISSA"));
    DataAccessAdapter adapter = new DataAccessAdapter();
    adapter.DeleteEntitiesDirectly("CustomerEntity", bucket);

    直接更新 Update A set Where

    var ShipmentImportTmpChangedEntity = new ShipmentImportTmpEntity();
    
    ShipmentImportTmpChangedEntity.TransactionType = "FeedBack";//直接赋值
    ShipmentImportTmpChangedEntity.Fields[(int)ShipmentImportTmpFieldIndex.TransactionType].ExpressionToApply = 
    new Expression(ShipmentImportTmpFields.PaymentType);//等于另外一个字段
    ShipmentImportTmpChangedEntity.Fields[(int)ShipmentImportTmpFieldIndex.TransactionType].ExpressionToApply =
    (ShipmentImportTmpFields.PaymentType + ShipmentImportTmpFields.TransactionType);//等于表达式
    
    IRelationPredicateBucket bucket2 = new RelationPredicateBucket();
    bucket2.PredicateExpression.Add(ShipmentImportTmpFields.PaymentType == "Amazon fees");
    adapter.UpdateEntitiesDirectly(ShipmentImportTmpChangedEntity, bucket2);
    
    //实际应该把其他的值设置为false,防止同时更新,然后使用currentValue赋值,防止发生连带赋值
    InventoryMovementDetailEntity updateMovDetails = new InventoryMovementDetailEntity();
    foreach (IEntityField2 field in updateMovDetails.Fields) { field.IsChanged = false; }
    updateMovDetails.Fields[(int)InventoryMovementDetailFieldIndex.CreatedDate].CurrentValue = DateTime.Now;
    adapter.UpdateEntitiesDirectly(updateMovDetails, bucket);

    事务

    using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
    {
    try{
    adapter.StartTransaction(IsolationLevel.ReadCommitted, "SalesShipmentImportOrder");
    使用LLBL基本的语句写
    adapter.Commit();
    }
    catch
    {
    adapter.Rollback();
    throw;
    }

     select * from A where A.xx in (select yy from B)

    bucket.PredicateExpression.Add(new FieldCompareSetPredicate(
                   JobOrderMaterialPickDetailFields.SourceRefNo, null, JobOrderFields.JobNo, null,
                   SetOperator.In, bucket.PredicateExpression, bucket.Relations)); 
  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/LiveYourLife/p/8398902.html
Copyright © 2020-2023  润新知