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小知识总结的更多相关文章

  1. [C#.NET 拾遗补漏]02:数组的几个小知识

    阅读本文大概需要 1.5 分钟. 数组本身相对来说比较简单,能想到的可写的东西不多.但还是有一些知识点值得总结和知晓一  下.有的知识点,知不知道不重要,工作中用的时候搜索一下就可以了,毕竟实现一个功 ...

  2. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  3. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  4. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  5. Unix系统小知识(转)

    Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...

  6. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

  7. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

  8. HTML小知识---Label

    今天知道了一个html小知识: <input type="checkbox" id="chkVersion" />                 ...

  9. Unicode和汉字编码小知识

    Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...

随机推荐

  1. Android应用启动时间及启动日志获取方法

    1. Android应用中,可以使用如下方式进行应用启动时间的查看 2. 启动日志获取方法:

  2. 修改Android手机的“虚拟机堆大小”和android:largeHeap来防止APP内存溢出问题

    使用“RAM Manager”修改“虚拟机堆大小”为某一个阀值 xxMB大小 修改 AndroidManifest.xml 里的 Application 标签的属性 android:largeHeap ...

  3. 如果你喜欢Python 那么你不得不知的几个开源项目

    1.Trac Trac拥有强大的bug管理 功能,并集成了Wiki 用于文档管理.它还支持代码管理工具Subversion ,这样可以在 bug管理和Wiki中方便地参考程序源代码. Trac有着比较 ...

  4. gcc编译器与基本类型3

    C语言发展史 1969年贝尔实验室 肯尼斯·蓝·汤普逊,丹尼斯·李奇开发了B语言 ->Unix,New B语言,改名C语言83年提出C语言标准 1989年十二月正式通过C语言标准,C89标准 C ...

  5. ACCESS TOKEN

    Access Token 在微信公众平台接口开发中,Access Token占据了一个很重要的地位,相当于进入各种接口的钥匙,拿到这个钥匙才有调用其他各种特殊接口的权限. access_token是公 ...

  6. 快速上手Android数据库操作

    Android采用关系型数据库SQLite3,它是一个支持SQL轻量级的嵌入式数据库,在嵌入式操作系统上有很广泛的应用,WM采用的也是SQLite3 关于过于.原理方面的东西在这篇文章里不会提到,但是 ...

  7. 快速开发 jQuery 插件的 10 大技巧(转)

    转自:http://www.oschina.net/news/41776/jquery-10-tips 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模 ...

  8. hadoop2.7【单节点】单机、伪分布、分布式安装指导

    问题导读 1.从本文部署实际部署,总结本地模式.伪分布.分布式的区别是什么?2.单机是否是伪分布?3.本地模式是否可以运行mapreduce? 来源:about云 http://www.aboutyu ...

  9. 第三百零四天 how can I 坚持

    我以为我遇到了,却是痴心妄想啊.哪有那么好的事.其实也无所谓,淡定,却又有点不淡定了. 洗澡睡觉吧,明天还要上班呢. 应该摆脱这种状态. 什么都不想,放空.

  10. Base64编解码(C++版)

    #include <string> using namespace std; class ZBase64 { public:     /*编码     DataByte         [ ...