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 ? : ,
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 - )).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 : ,
CostPrice = x.CostPrice,
SalePrice = x.SalePrice,
T_Stock = y != null ? y.T_Stock : ,
ValueStr = x.ValueStr,
All_stock = (y != null ? y.F_Stock : ) + (y != null ? y.T_Stock : ),
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 - ))
.Take<T>(pageSize).AsQueryable();
}
else
{
temp = temp.OrderByDescending<T, S>(orderLambda)
.Skip<T>(pageSize * (pageIndex - ))
.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() > ;
}
/// <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() > ;
} /// <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();
}
linq小知识总结的更多相关文章
- [C#.NET 拾遗补漏]02:数组的几个小知识
阅读本文大概需要 1.5 分钟. 数组本身相对来说比较简单,能想到的可写的东西不多.但还是有一些知识点值得总结和知晓一 下.有的知识点,知不知道不重要,工作中用的时候搜索一下就可以了,毕竟实现一个功 ...
- 蓝牙Bluetooth技术小知识
蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...
- HTML+CSS中的一些小知识
今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- Unix系统小知识(转)
Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...
- salesforce 零基础开发入门学习(十)IDE便捷小知识
在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...
- Jquery:小知识;
Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器 上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...
- HTML小知识---Label
今天知道了一个html小知识: <input type="checkbox" id="chkVersion" /> ...
- Unicode和汉字编码小知识
Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...
随机推荐
- <转>配置DNS辅助服务器:DNS系列之四
配置DNS辅助服务器 在前面的博文中,我们介绍了如何在DNS服务器中创建常用的DNS记录,本文中我们要为大家介绍如何配置DNS的辅助服务器,同时也要介绍一下和辅助区域类似的存根区域. DNS辅助服 ...
- 机器学习真的可以起作用吗?(3)(以二维PLA为例)
前两篇文章已经完成了大部分的工作,这篇文章主要是讲VC bound和 VC dimension这两个概念. (一)前文的一点补充 根据前面的讨论,我们似乎只需要用来替代来源的M就可以了,但是实际公式却 ...
- Adress
流水账的写法:因为不想让亲爱的你只看开头就关掉了我辛苦的劳作.流水账的好处是:便于逻辑的理解 http://software.intel.com/zh-cn/blogs/2014/01/20/cent ...
- CoffeeScript学习(1)——Quick Start
什么是CoffeeScript CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. Coffee ...
- HDU 5787 K-wolf Number (数位DP)
K-wolf Number 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5787 Description Alice thinks an integ ...
- Gym 100818I Olympic Parade(位运算)
Olympic Parade http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101594#problem/I [题意]: 给出N个数,找出 ...
- LCD1602汉字、自定义字符取模
用zimo221软件, 新建一个8*8的图像,留出左边3列,用右边5列点出自定义字符,选择取模方式C51,就可得到对应的编码 如下图:温度符号℃的编码
- 微信小程序正式上线 可置于聊天窗口顶部
历经一年的等待后,小程序在2017年1月9日凌晨终于揭开神秘面纱,正式上线. 微信小程序推广海报 随着小程序正式上线,用户现在可以通过二维码.搜索等方式体验到开发者们开发的小程序了. 用户只要将微信更 ...
- Windows 8 之 windbg 配置
怎么安装windbg? 在Win8中,要通过安装windows 8 SDK来安装. 安装之后,在C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x6 ...
- Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式升级 PSU(自动模式)
升级环境: 1.源库版本: Grid Infrastructure:11.2.0.3.13 Database:11.2.0.3.13 2.目标库版本: Grid Infrastructure:11.2 ...