当前位置: 首页 > news >正文

.NET LINQ 通常分 Syntax Query 和Syntax Method

在这里插入图片描述
LINQ To SQL 增、删、改
添加 InsertOnSubmit(单个对象) 或 InsertAllOnSubmit(集合)
删除 DeleteOnSubmit (单个对象) DeleteAllOnSubmit(集合)
SubmitChanges() 提交数据库
//创建LINQDB数据库上下文的实例
添加
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
//创建用户对象
UserInfo user = new UserInfo();
user.Username = t_UserName.Text; //赋值
user.Password = t_PassWord.Text;
user.Email = t_Email.Text;
try
{
db.UserInfo.InsertOnSubmit(user);//添加到数据库中
db.SubmitChanges();//提交更新
Response.Write(“”);
}
catch (Exception)
{
throw;
}
更新
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
var result = from u in db.UserInfo
where u.ID == Convert.ToInt32(e.CommandArgument)
select u; //找到需要修改记录
foreach (var item in result) //重新赋值
{
item.Username = t_UserName.Text;
item.Email = t_Email.Text;
}
db.SubmitChanges();//提交修改
删除
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
int id=Convert.ToInt32(e.CommandArgument);
var result = from UserInfo u in db.UserInfo
where u.ID == id
select u; //找到需要删除的记录
db.UserInfo.DeleteAllOnSubmit(result);
db.SubmitChanges();

1、Syntax Query
var xx=from i in x select i
2、Syntax Method
var db1=db.table.where(r=>r.age>10)

1、本地方法调用形式(LocalMethodCall)
var q = from c in db.Customers
where c.Country == “UK” || c.Country == “USA”
select new
{
c.CustomerID,
c.CompanyName,
Phone = c.Phone,
InternationalPhone = PhoneNumberConverter(c.Country, c.Phone)
};
public string PhoneNumberConverter(string Country, string Phone)
{
Phone = Phone.Replace(" “, “”).Replace(”)", “)-”);
switch (Country)
{
case “USA”:
return “1-” + Phone;
case “UK”:
return “44-” + Phone;
default:
return Phone;
}
}
2、指定类型形式: 使用SELECT和已知类型返回雇员姓名的序列
var q =
from e in db.Employees
select new Name
{
FirstName = e.FirstName,
LastName = e.LastName
};
3、条件形式:生成SQL语句为:case when condition then else
var q =
from p in db.Products
select new
{
p.ProductName,
Availability =
p.UnitsInStock - p.UnitsOnOrder < 0 ? “Out Of Stock” : “In Stock”
};
4、shaped形式(异型类型) 其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象
var q =
from c in db.Customers
select new {
c.CustomerID,
CompanyInfo = new {
c.CompanyName,
c.City, c.Country
},
ContactInfo = new {
c.ContactName,
c.ContactTitle
}
};
5、嵌套类型形式 返回的对象集中的每个对象DiscountedProducts属性中,又包含一个集合。也就是每个对象也是一个集合类。
var q =
from o in db.Orders
select new {
o.OrderID,
DiscountedProducts =
from od in o.OrderDetails
where od.Discount > 0.0
select od,
FreeShippingDiscount = o.Freight
};
6、Distinct形式:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers]
这个是立即执行的,以上都是延后加载的,
var q = (
from c in db.Customers
select c.City )
.Distinct();

syntax Method :

Count/Sum/Min/Max/Avg
Count:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM
var q = db.Customers.Count();//1.简单形式:
var q = db.Products.Count(p => !p.Discontinued);//2.带条件形式:
Sum:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM
var q = db.Orders.Select(o => o.Freight).Sum();//1.简单形式
var q = db.Products.Sum(p => p.UnitsOnOrder);//2.映射形式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一般都是可视化创建EDM模型的,
在这里插入图片描述
二、手动创建 EDM 手动建立实体类

在项目中添加一个类GuestInfoEntity.cs,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
namespace DataContexDemo
{
///
/// 手动建立实体类
///
[Table(Name=“tb_GuestInfo”)]
class GuestInfoEntity {
[Column(IsPrimaryKey=true,DbType=“Int NOT NULL IDENTITY”,IsDbGenerated=true,Name=“Id”)]
public int ID { get; set; }
[Column(DbType = “nvarchar(20)”, Name = “Name”)]
public string Name{get;set;}
[Column(DbType = “int”, Name = “Age”)]
public int Age { get; set; }
[Column(DbType = “nvarchar(20)”, Name = “Tel”)]
public string Tel { get; set; }
}
}
编写示例代码,注意需要引入System.Data.Linq.dll:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;/
namespace DataContexDemo
{
class Program {
static void Main(string[] args) {
//2.手动建立实体类
//
//连接字符串
string constring = @“Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义
nce=True”;
DataContext dc = new DataContext(constring); Table tb = dc.GetTable(); var query = tb.AsEnumerable();
foreach (var q in query) {
Console.WriteLine(“{0} {1} {2} {3}”,q.ID,q.Name,q.Age,q.Tel );
}
Console.ReadKey();
}
}
}

3、使用XML映射文件建立实体类
实体类的映射除了使用内联Attribute外,还可以建立一个包含映射信息的XML文件,此文件生成System.Data.Linq.Mapping.XmlMappingSource对象,作为DataContext
这个XML文件只有一个根节点—Database元素,用来映射的数据库信息。Database元素包含一个或多个Table元素,用于映射数据库表的信息,Table元素由一个Type mn元素用来指定列信息,Association元素用来映射数据库关系。 在项目中添加一个XML文件,采用默认名称XMLFile1.xml,内容如下:

<?xml version="1.0" encoding="utf-8" ?>

这个XML文件包含类全部的映射信息,下面建立映射的类GuestInfoEntity.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQtoSQL建立实体类_XML
{
public class GuestInfoEntity {
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Tel { get; set; }
}
}
编写示例代码,同样需要引入System.Data.Linq.dll:
using System;
using System.Collections.Generic;
using System.Linq; using System.Text;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.IO;//
namespace LINQtoSQL建立实体类_XML {
class Program {
static void Main(string[] args) {
string constring = @“Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义 nce=True”;
XmlMappingSource map = XmlMappingSource.FromXml(File.ReadAllText(“XMLFile1.xml”)); DataContext dc = new DataContext(constring, map); Table tb = dc.GetTable(); var query = tb.AsEnumerable();
foreach (var g in query) {
Console.WriteLine(“{0} {1} {2} {3}”,g.ID,g.Name,g.Age,g.Tel );
}
Console.ReadKey();
}
}
}

相关文章:

  • deepstream--nvinfer
  • python+vue+elementui企业会议管理系统django
  • centos 部署java环境,拷贝jar包并运行
  • 支持在线写SQL的Oracle学习免费网站(个人常使用)
  • ESP8266-Arduino编程实例-SHT20温湿度传感器驱动
  • 【web-代码审计】(14.5)PHP
  • Waline评论服务docker自部署手册 + 无需备案域名配置
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • C++后台开发学习路线(已多人拿下腾讯后台开发)
  • 中值滤波器 median filter
  • 基于ssm的图书(借阅)管理系统
  • linux内核中的I2C
  • 【Java面试】如何系统准备秋招?献上一份超硬核Java学习路线图+学习资源,拿走不谢!!
  • 面试分析:你懂不懂threadlocal?
  • ESP8266-Arduino编程实例-CCS811数字气体传感器驱动
  • github指令
  • JavaScript设计模式系列一:工厂模式
  • Java面向对象及其三大特征
  • LeetCode算法系列_0891_子序列宽度之和
  • log4j2输出到kafka
  • npx命令介绍
  • oldjun 检测网站的经验
  • spring + angular 实现导出excel
  • Terraform入门 - 1. 安装Terraform
  • 初识 beanstalkd
  • 给Prometheus造假数据的方法
  • 和 || 运算
  • 聚簇索引和非聚簇索引
  • 前端技术周刊 2019-01-14:客户端存储
  • 前嗅ForeSpider采集配置界面介绍
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 小程序测试方案初探
  • 小李飞刀:SQL题目刷起来!
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 阿里云移动端播放器高级功能介绍
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • # centos7下FFmpeg环境部署记录
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #if 1...#endif
  • (6)添加vue-cookie
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (十三)Flask之特殊装饰器详解
  • (转) 深度模型优化性能 调参
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET的数据绑定
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @RequestMapping用法详解
  • @Transient注解
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [ActionScript][AS3]小小笔记
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)