zoukankan      html  css  js  c++  java
  • linq小知识总结

    1linq的左连接查询

    var boundList = from x in text.S_Outbound
                                join y in text.S_Outbound_Per
                                on x.Shipment_ID equals y.Shipment_ID into temp
                                from y in temp.DefaultIfEmpty()
                                select new
                                 {
                                    Id = x.Id,
                                    perID = y.id == null ? 0 : 1,
                                    Shipment_ID = x.Shipment_ID,//订单编号
                                    Order_Type = y.Order_Type,//订单来源
                                    Actual_Ship_Date_Time = y.Actual_Ship_Date_Time,//返回时间
                                    USER_DEF2 = y.USER_DEF2,//快递单号
                                    Ship_To_Name = x.Ship_To_Name,
                                    Ship_To_Attention_To = x.Ship_To_Attention_To,
                                    Ship_To_Address1 = x.Ship_To_Address1 + x.Ship_To_Address2 + x.Ship_To_Address3,
                                    Ship_To_Phone_Num = x.Ship_To_Phone_Num,
                                    Carrier_Services = x.Carrier_Services,
                                    USER_DEF1 = x.USER_DEF1,//下单时间
                                };

    2linq实现分页查询

    (1)创建BaseQuery用于存储总数、页码和每页显示数量

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Model.Query
    {
        public class BaseQuery
        {
            public int PageIndex { get; set; }
            public int PageSize { get; set; }
            public int Total { get; set; }
        }
    }

    (2)添加实体类的查询条件并继承BaseQuery

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Model.Query
    {
        public class ProductQuery : BaseQuery
        {
            public string ProductName { get; set; }
    
        }
    }

    (3)在数据访问层实现查询的方法

     public IQueryable<Hishop_Products> LoadSearchData(ProductQuery query)
            {
                DbContext dbContext = new ShopEntities();
                dbContext.Configuration.ProxyCreationEnabled = false;
                var temp = dbContext.Set<Hishop_Products>().Where(u => true);
                if (!string.IsNullOrEmpty(query.ProductName))
                {
                    temp = temp.Where<Hishop_Products>(u => u.ProductName.Contains(query.ProductName));
                }
                #region   其他类型查询
                ////模糊查询
                //temp = temp.Where<Hishop_Products>(u => u.ProductName.Contains(query.ProductName));
                ////普通查询
                //temp = temp.Where<Hishop_Products>(u => u.ProductName.Equals(query.ProductName));
                ////值类型查询
                //temp = temp.Where<Hishop_Products>(u => u.ProductName == query.ProductName);
                #endregion
                query.Total = temp.Count();
                return temp.OrderBy(u => u.ProductId).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize);
            }

    3利用BaseController重新封装数据并返回Json数据

      public ContentResult JsonDate(object Date)
            {
                var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" };
                return Content(JsonConvert.SerializeObject(Date, Formatting.Indented, timeConverter));
            }

    4linq中自动求实体中某几个属性的累加和

     var manager = from x in data
                                  join y in text.SKUStock on x.skuId equals y.skuId into temp1
                                  from y in temp1.DefaultIfEmpty()
                                  select new
                                  {
                                      ProductId = x.ProductId,
                                      CategoryId = x.CategoryId,
                                      skuId = x.skuId,
                                      sku = x.sku,
                                      ProductName = x.ProductName,
                                      ThumbnailUrl60 = x.ThumbnailUrl60,
                                      stock = y != null ? y.F_Stock : 0,
                                      CostPrice = x.CostPrice,
                                      SalePrice = x.SalePrice,
                                      T_Stock = y != null ? y.T_Stock : 0,
                                      ValueStr = x.ValueStr,
                                      All_stock = (y != null ? y.F_Stock : 0) + (y != null ? y.T_Stock : 0),
                                      year = x.year
                                  };

    5屏蔽EF的自动导航用于解决EF+linq查出的数据循环引用的问题

    text.Configuration.ProxyCreationEnabled = false;
    text.Configuration.ValidateOnSaveEnabled = false;

    6当数据库中字段太多并且想要将这些字段重新组合成一列显示的时候可以用以下方法实现

    var ww = att.ToList().GroupBy(t => new { t.ProductId })
                        .Select(g => new
                        {
                            ProductId = g.Key.ProductId,
                            AttributeName = string.Join(",", g.Select(s => s.AttributeName).ToArray()),
                            ValueStr = string.Join(",", g.Select(s => s.ValueStr).ToArray())
                        });

    7linq的条件查询+分页

    /// <summary>
            /// 分页
            /// </summary>
            /// <typeparam name="S">排序类型</typeparam>
            /// <param name="pageIndex">页码</param>
            /// <param name="pageSize">每页显示条数</param>
            /// <param name="total">总数量</param>
            /// <param name="whereLambda">lambda表达式(查询条件)</param>
            /// <param name="isAsc">是否倒叙</param>
            /// <param name="orderLambda">lambda表达式(排序条件)</param>
            /// <returns></returns>
            public IQueryable<T> PageList<S>(int pageIndex, int pageSize, out int total, Func<T, bool> whereLambda, bool isAsc, Func<T, S> orderLambda)
            {
                var temp = context.Set<T>().Where<T>(whereLambda);
                total = temp.Count();
                if (isAsc)
                {
                    temp = temp.OrderBy<T, S>(orderLambda)
                        .Skip<T>(pageSize * (pageIndex - 1))
                        .Take<T>(pageSize).AsQueryable();
                }
                else
                {
                    temp = temp.OrderByDescending<T, S>(orderLambda)
                        .Skip<T>(pageSize * (pageIndex - 1))
                        .Take<T>(pageSize).AsQueryable();
                }
                return temp.AsQueryable();
            }

    8linq+EF底层代码的实现

    public T AddEntity(T model)
            {
                context.Set<T>().Attach(model);
                context.Entry<T>(model).State = EntityState.Added;
                dbSession.SaveChanges();
                return model;
            }
            /// <summary>
            /// 修改实体
            /// </summary>
            /// <param name="model">实体对象</param>
            /// <returns>修改成功为true失败为false</returns>
            public bool UpdateEntity(T model)
            {
                context.Set<T>().Attach(model);
                context.Entry<T>(model).State = EntityState.Modified;
                return dbSession.SaveChanges() > 0;
            }
            /// <summary>
            /// 删除实体
            /// </summary>
            /// <param name="model">实体对象</param>
            /// <returns>修改成功为true失败为false</returns>
            public bool DeleteEntity(T model)
            {
                context.Set<T>().Attach(model);
                context.Entry<T>(model).State = EntityState.Deleted;
                return dbSession.SaveChanges() > 0;
            }
    
    
            /// <summary>
            /// 根据条件查询实体集合
            /// </summary>
            /// <param name="whereLambda">lambda表达式(查询条件)</param>
            /// <returns>查询到的集合</returns>
            public IQueryable<T> SelectByWhere(Func<T, bool> whereLambda)
            {
                return context.Set<T>().Where<T>(whereLambda).AsQueryable();
            }
  • 相关阅读:
    ABP官方文档翻译 3.4 领域服务
    ABP官方文档翻译 3.3 仓储
    ABP官方文档翻译 3.2 值对象
    ABP官方文档翻译 3.1 实体
    ABP官方文档翻译 2.7 对象到对象的映射
    ABP官方文档翻译 2.6 定时
    bootstrap 源码中部分不了解的css属性
    vue 父组件调用子组件事件/子组件调用父组件方法
    js性能优化问题学习笔记
    js递归性能影响及解决方案
  • 原文地址:https://www.cnblogs.com/liuchang/p/4347826.html
Copyright © 2011-2022 走看看